我正在尝试匹配/分配以下行
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}'
感谢任何帮助 谢谢 汤姆
答案 0 :(得分:1)
你的正则表达式有点奇怪;扩展,看起来像
r"# ([a-zA-Z0-9_]*[0-9]*[ \t\n\r\f\v]*)+$"
注意事项:
它没有锚定到字符串的开头,这意味着它匹配
print("Important stuff!") # Very important
\d*
是多余的,因为它已被\w*
看看你的例子,看起来你应该不那么担心标点符号;你唯一不能拥有的是大括号({
)。
尝试
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