REGEX删除注释和前导/尾随空格

时间:2018-10-10 03:12:50

标签: python regex

我正在尝试创建一个正则表达式以删除开头的结尾空格和注释。

def func():
    text="""test1    #comments1
    test 2 blah      #comments2
    test3 4
    923423423        #comments3
    """

所需结果:

regextext="test1\ntest 2 blah\ntest3 4\n923423423"

到目前为止,我有以下内容:

(?:\s*(.*?)\s*)(?:#.*)

https://regex101.com/r/okF3mg/2

但是它缺少没有注释的行

4 个答案:

答案 0 :(得分:1)

您可以使用re.sub

import re
text="""test1    #comments1
test 2 blah      #comments2
test3 4
923423423        #comments3
"""
new_result = re.sub('\s+#\w+(?=\n)', '', text)

输出:

'test1\ntest 2 blah\ntest3 4\n923423423\n'

答案 1 :(得分:1)

要在单个正则表达式中实现此目的,您可以匹配前导空格,捕获懒惰重复的字符,然后 match 尾随空格和可选的#子字符串,并替换为第一个捕获的组:

output = re.sub(r'(?m)^ *(.*?) *(?:#.*)?$', r'\1', input)

答案 2 :(得分:0)

在任何可能的情况下,最好将标记内联到模式中:

In [337]: m1 = mat.transpose(2,0,1)
In [338]: m1@v1[...,None]
Out[338]: 
array([[[ 4.  ],
        [ 4.  ],
        [ 4.  ],
        [ 4.  ]],

       [[-0.5 ],
        [ 0.  ],
        [ 0.5 ],
        [ 3.55]]])
In [339]: _.shape
Out[339]: (2, 4, 1)

答案 3 :(得分:0)

使用正则表达式字符串^(.*?)(?:\s+#+.*|$)

该表达式表示找到行的结尾#comment ,这样它将捕获没有注释的行。

Python:

import re

text = """
for i in range(10):     # for loop
    print(i)            # prints number
print("Done.")          # prints "Done."
"""

regex = re.compile(r"^(.*?)(?:\s+#+.*|$)", re.MULTILINE)

matches = re.findall(regex, text)

new_text = ""

for i in matches:
    if i != "":
        new_text += i
        new_text += "\n"

print(new_text)

输出:

for i in range(10):
    print(i)
print("Done.")