如何在Python中创建正则表达式?

时间:2009-12-12 23:21:03

标签: python regex

我正在尝试创建正则表达式来过滤文本文件中的某些文本。我想要过滤的内容有这种格式:

word_*_word.word

所以例如,我希望每个匹配的python代码。样本结果如下:

program1_0.0-1_log.build
program2_0.1-3_log.build

我该怎么做?

非常感谢你的帮助

5 个答案:

答案 0 :(得分:3)

尝试这样的事情:

r'[a-zA-Z0-9]+_[^_]+_[a-zA-Z0-9]+\.[a-zA-Z0-9]+'

答案 1 :(得分:2)

看起来你想要使用r'\w+_.*_\w+\.\w+'这样的模式 - 假设你所拥有的*代表“零个或多个完全任意的字符”(如果没有,那么.*中间的部分需要相应地改变)。一旦你有了正确的模式(完全取决于你* ;-)的意思,你可以re.compile获取正则表达式对象,并使用.findall方法RE对象,以整体字符串作为参数,获取与此模式匹配的所有非重叠子字符串的列表(如果您希望一次获得一个这样的子字符串,还有其他选项,例如.finditer,循环在他们身上)。

答案 2 :(得分:1)

Python的正则表达式模块称为re。您需要导入它并使用provided functions

import re
if re.match(r'\w+_.*_\w+.\w+', "some_text_abc.x"):
   print "yeah."

使用r为正则表达式字符串添加前缀很有用,这样它就可以按字面解释,而无需对转义字符进行特殊处理。否则,反斜杠将由python解释器专门处理,并且正则表达式中的反斜杠需要被转义。

答案 3 :(得分:0)

尝试使用^\w+_.*_\w+\.\w+$

答案 4 :(得分:0)

我不明白为什么你需要一个正则表达式。 如果你想要的字符串以“.build”结尾,你可以这样做,例如

s="blah blah program1_0.0-1_log.build blah blah"    
for item in s.split():
    if item.endswith(".build"):
        print item

就是这样。如果你想进一步检查,那么

for item in s.split():
    if item.endswith(".build"):
        s = item.split("_")
        if len(s) != 3:
           print "not enough _"