我想返回所有以字母或数字开头和结尾的单词。它们最多可以在单词中包含一个句号
.
或连字符 -
。
因此,ab.ab
有效,但 ab.
无效。
import re
reg = r"[\d\w]+([-.][\d\w]+)?"
s = "sample text"
print(re.findall(reg, s))
由于括号的原因,它不起作用。如何将
?
应用于 [-.][\d\w]+
的组合
当然,不要进行群抓。使用
(?:pattern)
代替 (pattern)
:
import re
reg = r"[\d\w]+(?:[-.][\d\w]+)?"
s = "sample text"
print(re.findall(reg, s))
输出:
['sample', 'text']
改为非捕获组,这样就不会出现任何捕获组,这将确保完整的匹配被
re.findall
捕获:
reg = r"[\d\w]+(?:[-.][\d\w]+)?"