python的re:查找任意大小写以“string”开头的单词
我想写一个正则表达式,能够找到所有以 barbar
开头的单词,不管大小写都可以。它应该只返回匹配的部分,而不是整个单词。比如,从这个字符串中:
string = u'baRbarus, semibarbarus: qui BARbari sunt, alteres BARBARos non sequuntur!'
# output is...
>>> ['baRbar', 'BARbar', 'BARBAR']
我试过这样的代码:
re.compile(ur"([\A\b]*)(barbar)", re.UNICODE | re.IGNORECASE).findall(string)
# it returns...
[(u'', u'baRbar'), (u'', u'barbar'), (u'', u'BARbar'), (u'', u'BARBAR')]
看起来我有些误解了。你能帮我一下吗?如果你能推荐一些关于 re
模块的好教程,那就太好了。因为从Python的默认文档中理解 re
实在是太难了。谢谢!
4 个回答
0
你可以试试...
string = 'baRbarus, semibarbarus: qui BARbari sunt, alteres BARBARos non sequuntur!'
l=re.findall(' barbar.+? |^barbar.+? ', string, re.IGNORECASE)
print l
0
因为你只想要以“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”开头。
1
下面这个正则表达式可以满足你的需求(只要设置了标志):
\bbarbar
举个例子:
>>> s = u'baRbarus, semibarbarus: qui BARbari sunt, alteres BARBARos non sequuntur!'
>>> re.findall(r'\bbarbar', s, re.IGNORECASE | re.UNICODE)
[u'baRbar', u'BARbar', u'BARBAR']
这里有一些关于你当前正则表达式的评论,可能会帮助你理解为什么 \bbarbar
能够完成这个任务:
[\A\b]
-\A
通常表示字符串的开始,而\b
是单词的边界,但在字符类中,\b
变成了退格符,我也不太确定\A
变成了什么。[\A\b]*
- 这就是为什么你的正则表达式能匹配到 'semibarbarus' 的原因,*
表示0次或多次,所以这个部分不需要匹配。如果你去掉*
并且解决上面的问题,它就能正常工作了。([\A\b]*)(barbar)
- 多个分组意味着re.findall()
会返回一个包含所有分组的元组,而不仅仅是你感兴趣的那部分。