我正在尝试创建正则表达式来过滤文本文件中的某些文本。我想要过滤的内容有这种格式:
word_*_word.word
所以例如,我希望每个匹配的python代码。样本结果如下:
program1_0.0-1_log.build
program2_0.1-3_log.build
我该怎么做?
非常感谢你的帮助
答案 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 _"