Python 正则表达式:如果单词B在A之前,如何不匹配单词A
我正在使用python正则表达式引擎,并试图实现类似于字符串Python 正则表达式:如果单词B在A之前,如何不匹配单词A,python,regex,Python,Regex,我正在使用python正则表达式引擎,并试图实现类似于字符串foo、fou、bar、baz的功能。我想匹配baz当且仅当fou不在它前面时。我已经尝试了反向lookbehind(re模块不支持可变长度lookbehind,您需要使用regex模块 要使用re模块获取所需内容,您可以使用负前瞻来匹配fou,并使用捕获的组来获取baz: In [15]: str_ = 'foo,fou,bar,baz' In [16]: re.search(r'^(?!.*fou.*baz).*(baz)', s
foo、fou、bar、baz
的功能。我想匹配baz
当且仅当fou
不在它前面时。我已经尝试了反向lookbehind(re
模块不支持可变长度lookbehind,您需要使用regex
模块
要使用re
模块获取所需内容,您可以使用负前瞻来匹配fou
,并使用捕获的组来获取baz
:
In [15]: str_ = 'foo,fou,bar,baz'
In [16]: re.search(r'^(?!.*fou.*baz).*(baz)', str_)
In [17]: str_ = 'foo,foz,bar,baz'
In [18]: re.search(r'^(?!.*fou.*baz).*(baz)', str_)
Out[18]: <_sre.SRE_Match object; span=(0, 15), match='foo,foz,bar,baz'>
In [19]: re.search(r'^(?!.*fou.*baz).*(baz)', str_).group(1)
Out[19]: 'baz'
[15]中的:str_uu='foo,fou,bar,baz'
在[16]中:再搜索(r'^(?。*fou.*baz)。*(baz',str_uz)
在[17]中:str_uz='foo,foz,bar,baz'
在[18]中:再搜索(r'^(?。*fou.*baz)。*(baz',str_uz)
出[18]:
在[19]中:再搜索(r'^(?。*fou.*baz)。*(baz',str_uz.)组(1)
Out[19]:“baz”
在^(?。*fou.*baz.*(baz)
:
- 零宽度负前瞻,
(?!*fou.*baz)
,确保整个输入中fou
不在baz
之前
*(baz)
将baz
放入唯一捕获的组中
如果希望避免regex
开销,甚至可以使用字符串方法
string = """
foo,fou,bar,baz
foo,baz
baz, fou
neither nor"""
needle = "baz"
matches = [line
for line in string.split("\n")
for fou in [line.find('fou')]
for baz in [line.find(needle)]
if line and ((fou == -1 and baz > 0) or (baz < fou))]
print(matches)
# ['foo,baz', 'baz, fou']
string=”“”
foo,fou,bar,baz
福,巴兹
巴兹,福
非此即彼
needle=“baz”
匹配项=[行]
用于字符串中的行。拆分(“\n”)
对于[line.find('fou')中的fou
对于[line.find(针)]
如果行和((fou==-1且baz>0)或(baz
要在列表中保存变量x
,需要在[…]中为x使用