【问题标题】:Regular expression for (=string)(=string) 的正则表达式
【发布时间】:2014-05-09 15:21:18
【问题描述】:

我有一个包含数千行的文本文件。这是一个例子

line = .Falies/367. 11DG1550/11DG15537.Axiom=nt60
line = .Failies/367. 11DG1550/11DG15537.Axiom=nt50

我试图提取末尾的字符串 'nt60', 'nt50'。

lines = line.split('=')
version = lines[-1]

问题是行尾字符将被包括在内 ('\n')

我想过使用正则表达式搜索来匹配从 ('=nt') 开始的字符串 但我不知道我应该用什么来匹配=, word, number

有人可以帮忙吗?

【问题讨论】:

    标签: python regex string search match


    【解决方案1】:

    您的第一种方法绝对没问题。您可以只使用您使用第一种方法提取的字符串,然后将strip() 应用于它:

    strip() 从字符串中删除所有前导和尾随空格和换行符。

    >>> your_str = 'nt60\n'
    >>> your_str.strip()
    'nt60'
    

    对于您的情况:

    lines = line.rsplit('=',1)
    version = lines[-1].strip()
    

    【讨论】:

    • 不使用string(是一个模块)和str(是一个类型)作为变量名。
    • @Grijesh,您好。谢谢你。现在改了。
    • 谢谢@sshashank124 这真的很有帮助
    • 你应该使用rsplit('=', 1)。如果你有一个大文件,可能会变得更快。
    • @SukritKalra,感谢您的补充,已相应更新
    【解决方案2】:

    匹配= nt 然后匹配number 的正则表达式是:

    =(nt\d+)
    

    在你的例子中:

    line = .Falies/367. 11DG1550/11DG15537.Axiom=nt60 
    line = .Failies/367. 11DG1550/11DG15537.Axiom=nt50 
    

    它将返回两个匹配项:

    MATCH 1
    1.  [49-53] `nt60`
    MATCH 2
    1.  [105-109] `nt50`
    

    解释:

    `=` matches the character `=` literally 
    1st Capturing group `(nt\d+)`
       `nt` matches the characters `nt` literally (case sensitive)  
       `\d` match a digit `[0-9]`  
       `+` Quantifier: Between one and unlimited times, as many times as possible,  
           giving back as needed  
    

    如果您希望您的正则表达式匹配 a = word number,那么只需将 nt 替换为 \w+ 即可匹配任何单词。

    希望这会有所帮助。

    【讨论】:

    • 谢谢@unixer。我发现它有点复杂,但无论如何它都有帮助。
    • 没问题@MarJamil,选择适合您需要的任何东西 :)
    • @MarJamil 表示感谢@SO 的首选方式是vote
    • 你说得对 Grijesh 我无意冒犯它确实很有帮助,但对我的水平来说有点复杂。我确信当我的编程技能变得更好时,我会在进一步的阶段使用它。谢谢@unixer :)
    • 很好的答案,但是,正则表达式在这里可能有点矫枉过正,因为 OP 知道在字符串中查找的位置,rsplit 会更好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-17
    • 2012-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-07
    相关资源
    最近更新 更多