regex 无法使用正则表达式提取不以字符c开头的单词

doinxwow  于 2023-08-08  发布在  其他
关注(0)|答案(3)|浏览(95)

我有一个包含多行单词的字符串,我想从字符串中提取除了以c开头的单词之外的所有单词。
我试过这个

import re
inp='''bat
cat
mat
'''
pt=re.compile(r'[^c][a-z]+')
ma=pt.findall(inp)

字符串
我要

['bat', '\ncat', '\nmat']


如果我明确地提到“at”,这将非常有效

pt=re.compile(r'[^c]at')


其输出为:

['bat', 'mat']


但使用pt=re.compile(r'[^c][a-z]+')时不起作用

igsr9ssn

igsr9ssn1#

最干净的:

pt = re.compile(r'\b[^\Wc]\w*')
pt.findall(inp)
# ['bat', 'map']

字符串

  • \b:字边界
  • [^\Wc]:不是非字母数字字符(\W),也不是c
  • \w*:零个或多个字母数字字符

您可以使用\w+来禁止单个字母。

mzmfm0qo

mzmfm0qo2#

设置多行标志re.M,并使用锚点^作为行的开始

re.compile(r'^[^c][a-z]+', flags=re.M)

字符串

kpbwa7wx

kpbwa7wx3#

import re
inp='''bat
cat
map
'''
pt=re.compile(r'\b[^\nc][a-z]+')
ma=pt.findall(inp)
print(ma)

字符串
输出量:

['bat', 'map']

相关问题