假设我想要检索最终由 .com 或 .fr 而不是.edu的网站地址。这是我的尝试,显然它不起作用:
import re
text="www.cool.fr www.ham.edu www.stanford.com www.hack.ru"
re.findall(ur"\S+\.[com|fr]",text)
我想可能存在一些我不了解regexp的东西,以便以优雅的方式解决这个问题。提前谢谢。
答案 0 :(得分:4)
您的正则表达式使用字符类 [...]
,其中|
与文字|
符号匹配,它不是替换运算符。 [com|fr]
课程与c
,o
,m
,|
,f
或r
个字符匹配。
您需要使用一个组,并确保在com或fr之后有一个单词边界:
import re
text="www.cool.fr www.ham.edu www.stanford.com www.hack.ru"
print(re.findall(r"\S+\.(?:com|fr)\b",text))
# => ['www.cool.fr', 'www.stanford.com']
请参阅IDEONE demo
正则表达式匹配:
\S+\.
- 一个或多个非空格符号,后跟文字.
(?:com|fr)
- 一个非0捕获组,匹配2个替代方案:com
或fr
后跟... \b
- 一个单词边界。