复杂的正则表达式也会选择其他字符

时间:2017-07-13 13:42:35

标签: regex

我需要一只手用我的正则表达式。

我提供了一个我正在处理的文本块示例。我试图找出一个可以提取所有奇怪代码的正则表达式。问题是表达式也选择数字作为日期/时间的一部分,我想避免。我在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

1 个答案:

答案 0 :(得分:1)

如果我理解正确(并通过查看您的示例),您的代码包含字母和数字。那么这应该为你做到:

(?=[\w/]*\d)(?=[\w/]*[a-z])[\w/]+

它使用两个正向前瞻。第一个确保匹配的序列包含一个数字\d - (如果你的味道(应该被标记)不支持它,则改为[0-9](我猜python因为它在regex101中被选中) )。第二个确保它包含一个字母。

之后它只是匹配序列

请注意,所有序列匹配也允许/字符,因为它似乎是代码中的允许字符。

Your regex101 updated

修改

或者更简单 - 只需将*更改为+,就必须在正则表达式的第三次轮换中填写字母,从而保留代码的逻辑

(?<![.,:;-])(f\d*/\d+|\d+f|[a-z]+\d{2,}(j[a-z]?)?)(?![.,:;-])
                                ^ here

Here at regex101