python正则表达式:匹配列出的子串之一

时间:2015-12-04 15:18:31

标签: python regex

假设我想要检索最终由 .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的东西,以便以优雅的方式解决这个问题。提前谢谢。

1 个答案:

答案 0 :(得分:4)

您的正则表达式使用字符类 [...],其中|与文字|符号匹配,它不是替换运算符。 [com|fr]课程与com|fr个字符匹配。

您需要使用一个组,并确保在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个替代方案:comfr后跟...
  • \b - 一个单词边界。