python中的正则表达式

时间:2015-01-22 15:51:11

标签: python regex python-3.x

我正在尝试匹配/分配以下行

line1 = '# Some text\n'

但是要避免像这样的匹配/子行

'# Some text { .blah}\n'

所以在其他的#中跟随任意数量的单词空格和数字(没有标点符号),然后是行尾。

line2 = re.sub(r'# (\P+)$', r'# \1 { .text}', line1)

将line1的内容更改为第2行。 (我在某处读到\ P表示除标点符号以外的所有内容)

line2 = re.sub(r'# (\w*\d*\s*)+$', r'# \1 { .text}', line1)

以上给出了

'#  { .text}'

感谢任何帮助 谢谢 汤姆

2 个答案:

答案 0 :(得分:1)

你的正则表达式有点奇怪;扩展,看起来像

r"# ([a-zA-Z0-9_]*[0-9]*[ \t\n\r\f\v]*)+$"

注意事项:

  1. 它没有锚定到字符串的开头,这意味着它匹配

    print("Important stuff!")  # Very important
    
  2. \d*是多余的,因为它已被\w*

  3. 捕获
  4. 看看你的例子,看起来你应该不那么担心标点符号;你唯一不能拥有的是大括号({)。

  5. 尝试

    from functools import partial
    
    def add_text(txt):
        return re.sub(r"^#([^{]*)$", r"#\1 { .text }", txt, flags=re.M)
    
    text = "# Some text\n# More text { .blah}\nprint('abc') # but not me!\n# And once again"
    
    print("===before===")
    print(text)
    print("\n===after===")
    print(add_text(text))
    

    给出了

    ===before===
    # Some text
    # More text { .blah}
    print('abc') # but not me!
    # And once again
    
    ===after===
    # Some text { .text }
    # More text { .blah}
    print('abc') # but not me!
    # And once again { .text }
    

答案 1 :(得分:-1)

如果您只想要以#开头并且继续使用字母数字值,空格和_的行,您需要这样:

/^#[\w ]+$/gm