python的re:在任何ca中查找以“string”开头的单词

2024-04-29 10:26:53 发布

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

我正在尝试创建一个regex,它在任何情况下都将返回以barbar开头的列表单词。它不能返回整个单词,而只能返回匹配的部分。例如,从字符串

string = u'baRbarus, semibarbarus: qui BARbari sunt, alteres BARBARos non sequuntur!'
# output is...
>>> ['baRbar', 'BARbar', 'BARBAR']

我试过这样的代码:

^{pr2}$

我好像误解了什么。你能帮帮我吗?如果你能提供一些关于re模块的好的教程,那也会很好。从默认的Python文档中很难理解re。谢谢!在


Tags: 字符串re列表string情况单词regexqui
3条回答

因为你想要只有以barbar开头的单词,所以你必须先把字符串分开。所以你应该这样做:

def findBarbarus(my_string):
  result = []
  for s in my_string.split(" "):
    result += re.compile(ur"(^barbar)", re.UNICODE | re.IGNORECASE).findall(s)
  return result

正则表达式中的^表示该词必须以barbar开头。在

以下正则表达式足以满足您的需要(只要设置了标志):

\bbarbar

示例:

^{pr2}$

以下是对当前regex的一些注释,这些注释可能会澄清\bbarbar执行此操作的原因:

  • [\A\b]-\A通常是字符串的开始,而{}是单词边界,但是字符类的内部{}变成了一个退格,我不太确定{}变成了什么
  • [\A\b]*-这就是你的regex匹配“semibarus”的原因,*表示0或更多,因此不需要该部分进行匹配,如果你删除了{}并修复了上面的问题,它就可以工作了
  • ([\A\b]*)(barbar)-多个组意味着{}将返回组的元组,而不仅仅是您感兴趣的部分

你可以试试。。。在

string = 'baRbarus, semibarbarus: qui BARbari sunt, alteres BARBARos non sequuntur!'

l=re.findall(' barbar.+? |^barbar.+? ', string, re.IGNORECASE)
print l

相关问题 更多 >