【问题标题】:How can I create a regular expression in Python?如何在 Python 中创建正则表达式?
【发布时间】:2009-12-12 23:21:02
【问题描述】:

我正在尝试创建正则表达式来过滤文本文件中的某些文本。我要过滤的格式如下:

word_*_word.word

例如,我希望每次匹配都使用 python 代码。示例结果为:

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

我该怎么做?

非常感谢您的帮助

【问题讨论】:

    标签: python regex


    【解决方案1】:

    试试这样的:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

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

        在正则表达式字符串前加上r 是很有用的,这样它就可以按字面意思解释,而无需对转义字符进行特殊处理。否则反斜杠将被 python 解释器特殊处理,并且作为正则表达式一部分的反斜杠需要被转义。

        【讨论】:

        • 这匹配“任意数量的下划线”,这看起来很奇怪(并且不满足 OP 的示例)。
        • @sth, tx -- 同样,re.match 仅匹配字符串的 start (在某种意义上,就好像模式以隐含的 ^ 开头) 所以它可能不会按照 OP 的要求在文件中获得“每个匹配项”。
        • 好吧,我的主要观点更多的是指向re 模块,它是文档,也是基本用法。在我看来,这是 OP 首先要解决的基本问题,然后才关心确切的正则表达式以及应该匹配的内容。 (我基本上只关注 in python 部分,而不是 what 正则表达式 部分)
        【解决方案4】:

        试试^\w+_.*_\w+\.\w+$

        【讨论】:

        • 通过锚定模式使其仅匹配整行(如果您记得指定 re.MULTILINE - 否则,只有整个文件,并且仅当您没有指定 re.DOTALL 时它没有换行符;-)。
        【解决方案5】:

        我不明白你为什么需要一个正则表达式。 如果你想要的字符串以“.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 _"
        

        【讨论】:

        • 您可能更喜欢使用正则表达式来查找具有 1 行代码的内容,而不是多行循环。
        • 我很少在 Python 中使用正则表达式,除非绝对必要。使用 Python 的内部字符串方法也更快,IMO。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-06-30
        • 2015-04-19
        • 1970-01-01
        • 2018-03-20
        • 2020-03-17
        • 1970-01-01
        • 2020-03-25
        相关资源
        最近更新 更多