我正试图(用正则表达式(在我的字符跟踪器集中,在分隔符(冒号(后面找到指定的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']