regex 如何仅在单词出现在之前或之后时才匹配正则表达式

col17t5w  于 2023-08-08  发布在  其他
关注(0)|答案(2)|浏览(106)

我真的很纠结于一些正则表达式。我已经看了一个类似的问题,我不知道为什么它不工作!
我试图匹配字符串'ok',当它前面有4个数字((?<=\d{4}\s)ok),但仅当单词'devo'出现在字符串中之前或之后的任何位置时

text_to_search="devo XXXXXXXXXX 9999 ok ferial blabla" 
pattern = re.compile(r"(?<=devo)((?<=\d{4}\s)ok)|((?<=\d{4}\s)ok)(?=devo)")
matches = pattern.finditer (text_to_search)
[print (x) for x in matches]

字符串
这不返回任何匹配项...如果我尝试:

text_to_search=" XXXXXXXXXX 9999 ok ferial blabla devo"


也不行。
为了清楚起见,上面的两个例子应该匹配,但是如果我举另一个例子,比如:

text_to_search=" XXXXXXXXXX 9999 ok ferial blabla"


则这不应产生匹配,因为‘devo’不存在。
提前感谢你的帮助

sycxhyv7

sycxhyv71#

你可以通过先检查devo是否在字符串中来简化正则表达式:

import re

text_to_search=" XXXXXXXXXX 9999 ok ferial blabla devo" 

ok = re.compile(r'(?<=\d{4}\s)ok')

if 'devo' in text_to_search:
    matches = [m.string for m in ok.finditer(text_to_search)]
else:
    print('no match')
    matches = []

字符串

5sxhfpxr

5sxhfpxr2#

你没有任何关于“任何地方”之前或之后的部分。试试这个

(?<=devo).*((?<=\d{4}\s)ok)|((?<=\d{4}\s)ok).*(?=devo)

字符串
但我觉得这里的景观有点过头了。一个简单得多的

(devo.*\d{4}\sok)|(\d{4}\sok.*devo)


也许也能成功

相关问题