我有一个以不同间隔出现的字符串/值模式。模式如下: 2016/9/30 2,085,669 0 0 UC否
我该如何识别并从细胞中提取。我一直在尝试使用正则表达式来解决此问题。请注意,该模式可以在单个单元格中的任何情况下发生。即。
要确定日期,我正在使用下面的正则表达式,这不是最好的方法,但是我会做。
(^\d{1,2}\/\d{1,2}\/\d{4}$)
如何用剩余的图案缝制呢?
答案 0 :(得分:3)
您只匹配日期,例如锚点之间的部分,以断言字符串的开始^
和结束$
。
请注意,如果只想匹配值,则可以省略括号()
,使其成为表达式周围的捕获组。
您可以将其扩展为:
^\d{1,2}\/\d{1,2}\/\d{4} \d+(?:,\d+)+ \d+ \d+ [A-Za-z]+ [A-Za-z]+$
说明
^
字符串的开头\d{1,2}\/\d{1,2}\/\d{4}
匹配日期(如模式)\d+(?:,\d+)+
匹配1+个数字并重复1+次以匹配逗号和数字\d+ \d+
匹配两次1+位数字,后跟一个空格[A-Za-z]+ [A-Za-z]+
匹配2次1+字符a-z,后跟一个空格$
字符串结尾答案 1 :(得分:1)
如果只希望从字符串的任何位置提取日期,则此表达式在日期之前和之后使用两个捕获组,中间的组捕获所需的日期:
(.*?)(\d{1,2}\/\d{1,2}\/\d{4})(.*)
您可能不想使用start ^和end $ chars,它将起作用。
如果您希望匹配并捕获所有内容,则可能只想添加更多边界,并逐步匹配模式,也许类似于以下表达式:
(.*?)(\d{1,2}\/\d{1,2}\/\d{4})\s+([0-9,]+)\s+([0-9]+)\s+([0-9]+)\s+([A-Z]+)\s+(No)(.*)
This tool可以帮助您根据需要编辑/修改/更改表达式。
为了安全起见,我添加了额外的边界,您可以简化此边界。
此link可帮助您形象化表情: