我正在尝试编写匹配的正则表达式,如果关键字在停用词之前没有出现在字符串中的某个位置。
示例:
这不应该匹配任何东西:
aaa:好的
bbb:失败
ccc:好的
停止字
随机文本确定随机文本失败
这应该匹配:
aaa:好的
bbb:好的
ccc:好的
停止字
随机文本确定随机文本失败
我想我应该使用否定支票^(?!.*Failed)
,但如何停止[stopword]检查?
如果重要的话,我正在尝试使用pythons regex引擎。
编辑:抱歉不清楚。是的,它是“失败”我想不匹配,不幸的是我需要一个“正则表达式”-solution即re.search(regex, string)
,因为我没有任何访问输入变量regex和string之外的代码。
如果我可以直接在Python中完成它,我会避免使用正则表达式。 ;)
答案 0 :(得分:3)
如果我理解正确,您需要确保字符串'Failed'
不会出现在字符串'stopword'
之前的任何位置。假设是这种情况,最简单的方法是在Failed
之前找出stopword
,然后反转您的结果。假设text
是您的输入:
not re.match(r'.*?Failed.*?stopword', text, re.DOTALL)
当然,使用直接python会更容易:
'Failed' not in text.split('stopword')[0]
答案 1 :(得分:0)
无论你想要实现什么,你都不会很好地解释它。
如果要检查字符串中是否存在“失败”,而不是在特定子字符串之后检查,则将字符串拆分并仅查看第一部分。
>>> sample1 = """
... aaa: OK
... bbb: Failed
... ccc: OK
... stopword
... Random Text OK Failed Random Text
... """
>>> sample2 = """
... aaa: OK
... bbb: OK
... ccc: OK
... stopword
... Random Text OK Failed Random Text
... """
>>>
>>> print "Failed in sample1:", 'Failed' in sample1.partition('stopword')[0]
Failed in sample1: True
>>> print "Failed in sample2:", 'Failed' in sample2.partition('stopword')[0]
Failed in sample2: False
>>>