我正在尝试在引号(“)和空格后添加\ n。
我能找到的最接近的是re.sub,但是它删除了某些字符。
line = 'Type: "SecurityIncident" RowID: "FB013B06-B04C-4FEB-A5A5-3B858F910F29"'
q = re.sub(r'[\d\w]" ', '\n', line)
print(q)
输出:
类型:“ SecurityInciden \ n行ID:” FB013B06-B04C-4FEB-A5A5-3B858F910F2 \ n
寻找解决方案,而不会删除任何字符。
答案 0 :(得分:1)
您尝试过的正则表达式[\d\w]"
几乎可以,但是有些短处。您无需在字符集中用\d
来写\w
,因为这是多余的,因为\w
中已经包含\d
。由于仅\w
就足以表示字母,数字或下划线,因此无需将其括在字符集[]
中,因此您只需编写\w
,更新后的正则表达式就变成{{1 }}。
但是现在,如果您将此正则表达式匹配并用\w"
代替,它将匹配文字字母\n
,然后匹配t
和一个空格,并且将其替换为"
这就是为什么得到此输出的原因,
\n
您需要在group1中捕获匹配的字符串,并且在替换时需要在替换时使用它,以便不会被替换,因此您应该使用SecurityInciden\nRowID
作为替换,而不仅仅是\1\n
< / p>
尝试此更新的正则表达式,
\n
并用(\w" )
如果您注意到第一行的行尾有多余的空间,并且如果您不希望在该行中有该空间,则可以从那些捕获括号的空间中删除该空间并使用此正则表达式,
\1\n
这是示例python代码,
(\w")
^ space here
输出
import re
line = 'Type: "SecurityIncident" RowID: "FB013B06-B04C-4FEB-A5A5-3B858F910F29"'
q = re.sub(r'(\w") ', r'\1\n', line)
print(q)
答案 1 :(得分:0)
尝试一下:
import re
line = 'Type: "SecurityIncident" RowID: "FB013B06-B04C-4FEB-A5A5-3B858F910F29"'
pattern = re.compile('(\w+): (".+?"\s?)', re.IGNORECASE)
q = re.sub(pattern, r'\g<1>: \g<2>\n', line)
print(repr(q))
它应该为您提供以下结果:
类型:“ SecurityIncident” \ n行ID: “ FB013B06-B04C-4FEB-A5A5-3B858F910F29” \ n
答案 2 :(得分:0)
在正则表达式中,您要从事件中删除t,因为您将其匹配,而不在替换中使用它。
要获得结果的另一种选择可能是在双引号后面加上空格,当使用正lookbehind开头的单词字符时。
然后使用换行符将结果重新组合在一起。
(?<=\w)"
例如:
import re
line = 'Type: "SecurityIncident" RowID: "FB013B06-B04C-4FEB-A5A5-3B858F910F29"'
print("\n".join(re.split(r'(?<=\w)" ', line)))
结果
Type: "SecurityIncident
RowID: "FB013B06-B04C-4FEB-A5A5-3B858F910F29"