Per*_*den 7 regex excel vba excel-vba
我现在的正则表达式:
([\d]*)([^\d]*[\d][a-z]*-[\d]*)([\d][a-z?])(.?)
Run Code Online (Sandbox Code Playgroud)
是的,所以我试图使正则表达式匹配一个基于以下的字符串:一个数字,可以是0-1百万的任意数量,然后是数字,然后有时一个字母然后 - 然后任何数字的数字后跟相同的数字,有时一封信,有时候是一封信.它应匹配的字符串示例:
1921-1220104081741b
192123212a-1220234104081742ab
Run Code Online (Sandbox Code Playgroud)
基于上面应该返回的示例(这是两个示例,它不应该读取两行.)
(192) (1-122010408174) (1) (b)
(19212321) (2a-122023410408174) (2a) (b)
Run Code Online (Sandbox Code Playgroud)
我当前的正则表达式适用于第二个但它在第一个时返回(1b),当我希望它返回(1)(b)但在第二个或者下面的情况下返回(2a):
1926h-1220104081746h Should Return: (192) (6h-122010408174) (6h)
Run Code Online (Sandbox Code Playgroud)
不是100%肯定是否可能,感觉我对正则表达式相当新.作为参考我在excel-vba中这样做,如果还有其他方法可以更容易地做到这一点.
您可以捕获破折号字符之前的字符,然后向后引用匹配的字符。
在下面的表达式中,\3将匹配第三个捕获组所匹配的内容:
(\d*)((\d[a-z]*)-\d*)(\3)([a-z])?
Run Code Online (Sandbox Code Playgroud)
合并捕获组后的输出:
1921-1220104081741b
(192) (1-122010408174) (1) (b)
Run Code Online (Sandbox Code Playgroud)
192123212a-1220234104081742ab
(19212321) (2a-122023410408174) (2a) (b)
Run Code Online (Sandbox Code Playgroud)
1926h-1220104081746h
(192) (6h-122010408174) (6h)
Run Code Online (Sandbox Code Playgroud)
忽略JS。这是合并捕获组后的输出:
(\d*)((\d[a-z]*)-\d*)(\3)([a-z])?
Run Code Online (Sandbox Code Playgroud)
1921-1220104081741b
(192) (1-122010408174) (1) (b)
Run Code Online (Sandbox Code Playgroud)