我正在尝试创建一个正则表达式以删除开头的结尾空格和注释。
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
但是它缺少没有注释的行
答案 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.")