无法让正则表达式在 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】:在正则表达式模式中,尽量不要通过创建不需要的东西集来尝试匹配所有存在的东西,而是找到锚点并使用通用模式匹配来找到需要的东西。..
以下将使用#1
、submitted 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)。