Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 正则表达式:如果单词B在A之前,如何不匹配单词A_Python_Regex - Fatal编程技术网

Python 正则表达式:如果单词B在A之前,如何不匹配单词A

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

我正在使用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)', 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使用