在指定的分隔符后查找所选字符



我正试图(用正则表达式(在我的字符跟踪器集中,在分隔符(冒号(后面找到指定的EVERYTHING。

示例:

Test3131:PythonBoolJava!Python
Overflow:PythonBoolFAKE!Python@021!
Overflo!w2:PythonBoolUnix-Python;?
Over3_flow:PythonBoolUnix^Python%

期望输出:

Test3131:PythonBoolJavaPython
Overflow:PythonBoolFAKEPython021
Overflo!w2:PythonBoolUnixPython
Over3_flow:PythonBoolUnixPython

因此-
忽略分隔符:之前的所有数据
使用正则表达式[$&+,:;=?@#|'<>.^*()%!-]搜索所有字符,而不考虑行位置

匹配后,我会选择手动在数据集中进行标记。

我尝试过的:
然而,这没有用。

.*:.*[$&+,:;=?@#|'<>.^*()%!-]

然而

如果可用,例如Python的PyPi的regex模块,可能是:

(?::|G(?!^)).*?K[!#-.:-@^|]+

查看在线演示。请注意,我是如何使用ascii表将您的字符列表压缩为[!#-.:-@^|]的。它仍然会捕捉到你所赋予的所有角色。

  • (?:-打开非捕获组;
    • :-捕获第一个结肠
    • |-或
    • G(?!^)——假定上一场比赛结束时的位置,但不包括起跑线
    • )——关闭非捕获组
  • .*?K-0+(懒惰(字符,直到我们重置报告匹配的起点
  • [!#-.:-@^|]+-任意1+个给定字符

另一个选项(例如,如果通过JavaScript或Python的PyPi正则表达式模块可用(是零宽度查找:

(?<=^[^:]*:.*?)[!#-.:-@^|]+

查看在线演示

  • (?<=^[^:]*:.*?)-正向查找,用于检查起始行锚点后是否有冒号、0+非冒号字符以及紧接其后的任何0+(惰性(字符
  • [!#-.:-@^|]+-任意1+个给定字符

Python的代码示例:

import regex as re
l_in = ["Test3131:PythonBoolJavaPython", "Overflow:PythonBoolFAKEPython021", "Overflo!w2:PythonBoolUnixPython", "Over3_flow:PythonBoolUnixPython"]
l_out1 = [re.sub(r"(?::|G(?!^)).*?K[!#-.:-@^|]+", '', el) for el in l_in]
l_out2 = [re.sub(r"(?<=^[^:]*:.*?)[!#-.:-@^|]+", '', el) for el in l_in]
print(l_out1, l_out2)

打印:

['Test3131:PythonBoolJavaPython',
'Overflow:PythonBoolFAKEPython021',
'Overflo!w2:PythonBoolUnixPython',
'Over3_flow:PythonBoolUnixPython']
['Test3131:PythonBoolJavaPython',
'Overflow:PythonBoolFAKEPython021',
'Overflo!w2:PythonBoolUnixPython',
'Over3_flow:PythonBoolUnixPython']

最新更新