忽略前面没有delimi的可选后缀

2024-06-25 23:49:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我想捕捉单词的第一部分,忽略可选后缀。后缀和前面的文本都由同一类字符组成(也就是说,后缀前面没有分隔符)。你知道吗

我的第一次尝试只捕获了第一个字母:

m = re.search(r'([A-Za-z]+?)(?:Suff)?', 'textSuff')
m.groups()
>>> ('t',)

我只想捕获“text”,但当我使第一个group元素贪婪时,它会捕获整个字符串。你知道吗

m = re.search(r'([A-Za-z]+)(?:Suff)?', 'textSuff')
m.groups()
>>> ('textSuff',)

没有不同的字符来限定后缀是否可行?你知道吗


Tags: text文本re元素search字母group字符
2条回答

您需要指定在所有事情之后,要么字符串必须结束,要么必须有一个不可接受的字符。。。。你知道吗

m = re.search(r'([A-Za-z]+?)(?:Suff)?(?:[^A-Za-z]|$)'

如果您的模式都是由可选模式构建的,请确保您得到的字符数尽可能少。因此,必须至少有一个边界。我想单词boundary\b是一种有效的方法(因为您需要匹配单词):

([A-Za-z]+?)(?:Suff)?\b

demo

IDEONE DEMO

import re
p = re.compile(r'([A-Za-z]+?)(?:Suff)?\b')
test_str = "textSuff more words tSuff"
print(re.findall(p, test_str))

输出:

['text', 'more', 'words', 't']

相关问题 更多 >