无法让正则表达式在 c# 中提取 mm/dd/yyyy

Posted

技术标签:

【中文标题】无法让正则表达式在 c# 中提取 mm/dd/yyyy【英文标题】:Can't get Regex to pull mm/dd/yyyy in c# 【发布时间】:2019-02-03 16:27:03 【问题描述】:

我正在解析一个大字符串,除了获取日期之外,一切都在工作。

我尝试将以下内容放在图片中的 Group3 括号中,然后我丢失了所有正在工作的组,包括 Group1 和 Group2:

^\d1,2/\d1,2/\d4$

/^\d1,2\/\d1,2\/\d4$/

/^(0[1-9]|1[0-2])\/(0[1-9]|1\d|2\d|3[01])\/(19|20)\d2$/

^((0|1)\d1)-((0|1|2)\d1)-((19|20)\d2)

最好的工作正则表达式(得到 Group1 和 Group2 罚款)是:

((?:[a-zA-Z'-]+[^a-zA-Z'-]+)0,2)assigned by((?:[^a-zA-Z'-]+[a-zA-Z'-]+)0,2) on ()

还有一个数据样本: “#1 xxxxx xxxxx 由 Alex xxxxx 于 08/10/2018 分配,请求由 xxxxx 于 2018 年 8 月 10 日提交,请求由 xxxxx Olander 于 2018 年 8 月 10 日创建 邮寄:1"

注意:日期后面的逗号并不总是存在。

【问题讨论】:

你为什么使用 ^ 和 $ 锚点?看来这是你的问题。 我得到了这个工作,但我对正则表达式的了解不够,无法确定它对于我的所有数据是否足够“强大”:((?:[a-zA-Z'-] +[^a-zA-Z'-]+)0,2)由((?:[^a-zA-Z'-]+[a-zA-Z'-]+)0, 2) 上 (\d\d\/\d\d\/\d\d\d\d) 你实际上想从线路中提取什么数据? 【参考方案1】:

在正则表达式模式中,尽量不要通过创建不需要的东西集来尝试匹配所有存在的东西,而是找到锚点并使用通用模式匹配来找到需要的东西。..

以下将使用#1submitted by[sp]on[sp] 的锚点,然后我们将围绕它进行一般提取。最后,将使用基本日期模式来获取日期。请注意,我使用命名组捕获来简化提取。

string data = "#1 xxxxx xxxxx assigned by Alex xxxxx on 08/10/2018,Request submitted by xxxxx on 08/10/2018,Request created by xxxxx Olander on 08/10/2018 Mailed: 1";

string pattern = @"
\#\d+\s+                      # Anchor for the #
(?<Person1>.+?)               # Match Person 1
(?=\sassigned\s)              # Look Ahead for assigned
\sassigned\sby\s              # Consume but don't match assigned
(?<Person2>.+?)               # Match person 2
(?=\son\s)                    # LA for son
\son\s                        # consume
(?<Date>\d\d\D\d\d\D\d\d\d\d) #Get date
";

Regex.Matches(data, pattern, RegexOptions.IgnorePatternWhitespace)
     .OfType<Match>()
     .Select(mt => new 
                         P1 = mt.Groups["Person1"].Value,
                         P2 = mt.Groups["Person2"].Value,
                         DTE = mt.Groups["Date"].Value,
                        )

结果是一个项目的列表,我猜你有多个捕获。

【讨论】:

以上是关于无法让正则表达式在 c# 中提取 mm/dd/yyyy的主要内容,如果未能解决你的问题,请参考以下文章

在 jquery 数据表中显示之前将 json 日期格式化为 mm/dd/yy 格式

将 'yyyymmdd hhmmss' 转换为 'mm/dd/yy hh:mm'

时间处理+年龄计算

编写一个程序, 接收用户录入的日期信息并且将其显示出来. 其中, 输入日期的形式为月/日/年(mm/dd/yy), 输出日期的形式为年月日(yy.mm.dd)。

编写一个程序, 接收用户录入的日期信息并且将其显示出来. 其中, 输入日期的形式为月/日/年(mm/dd/yy), 输出日期的形式为年月日(yy.mm.dd)。

我无法理解如何在 c# 中使用正则表达式或如何解决我的问题