我需要一只手用我的正则表达式。
我提供了一个我正在处理的文本块示例。我试图找出一个可以提取所有奇怪代码的正则表达式。问题是表达式也选择数字作为日期/时间的一部分,我想避免。我在regular expression online网站上保存了结果。到目前为止我一直在使用的表达如下:
(?<![.,:;-])(f[0-9]*[/][0-9]+|[0-9]+f|[a-z]*[0-9]{2,}(j[a-z]?)?)(?![.,:;-])
我希望lookarounds可以防止在日期/时间中选择数字。我还尝试添加&#34; new line&#34;那里的人物,但它没有解决问题。我该如何解决?
由于
这是文本块的示例:
2017-01-01 19:30:00.000
something something
2017-01-01 19:30:00.000
xxx aaa bbb 1234f
12345f bbb aaaaa xxx aaaa 2345f xxx
f1/234 aaa bbb
f/1234 xxx yyy
aaa bbb ccc ddd f6/789
a11j's aaaaa
b12j's aaaaa
c13j aaaaa
d14j aaaaa
e15 aaaaa
1234j
1234ja
2345jb
123456jc
ab1234 something something cd234
2016-05-30 19:30:00.000
答案 0 :(得分:1)
如果我理解正确(并通过查看您的示例),您的代码包含字母和数字。那么这应该为你做到:
(?=[\w/]*\d)(?=[\w/]*[a-z])[\w/]+
它使用两个正向前瞻。第一个确保匹配的序列包含一个数字\d
- (如果你的味道(应该被标记)不支持它,则改为[0-9](我猜python因为它在regex101中被选中) )。第二个确保它包含一个字母。
之后它只是匹配序列。
请注意,所有序列匹配也允许/
字符,因为它似乎是代码中的允许字符。
修改强>
或者更简单 - 只需将*
更改为+
,就必须在正则表达式的第三次轮换中填写字母,从而保留代码的逻辑。
(?<![.,:;-])(f\d*/\d+|\d+f|[a-z]+\d{2,}(j[a-z]?)?)(?![.,:;-])
^ here