正则表达式,用于标识日期后跟特殊模式

时间:2019-05-12 15:21:06

标签: regex vba regex-lookarounds regex-group regex-greedy

我有一个以不同间隔出现的字符串/值模式。模式如下:   2016/9/30 2,085,669 0 0 UC否

  1. 日期>空格>以逗号分隔的数字>空格>数字>空格>数字>空格>字符串>空格>数字

我该如何识别并从细胞中提取。我一直在尝试使用正则表达式来解决此问题。请注意,该模式可以在单个单元格中的任何情况下发生。即。

  1. Somestring(space)(30/09/2016 2,085,669 0 0 UC No)(space)More string
  2. 字符串(空格)(2016/9/30 2,085,669 0 0 UC否)
  3. 括号仅用于说明

要确定日期,我正在使用下面的正则表达式,这不是最好的方法,但是我会做。

(^\d{1,2}\/\d{1,2}\/\d{4}$)

如何用剩余的图案缝制呢?

2 个答案:

答案 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,后跟一个空格
  • $字符串结尾

Regex demo

答案 1 :(得分:1)

如果只希望从字符串的任何位置提取日期,则此表达式在日期之前和之后使用两个捕获组,中间的组捕获所需的日期:

(.*?)(\d{1,2}\/\d{1,2}\/\d{4})(.*)

您可能不想使用start ^和end $ chars,它将起作用。

enter image description here

如果您希望匹配并捕获所有内容,则可能只想添加更多边界,并逐步匹配模式,也许类似于以下表达式:

(.*?)(\d{1,2}\/\d{1,2}\/\d{4})\s+([0-9,]+)\s+([0-9]+)\s+([0-9]+)\s+([A-Z]+)\s+(No)(.*)

This tool可以帮助您根据需要编辑/修改/更改表达式。

enter image description here

为了安全起见,我添加了额外的边界,您可以简化此边界。

RegEx描述图

link可帮助您形象化表情:

enter image description here