如何使用join和regex?

时间:2019-01-26 09:35:48

标签: python regex join

我正在尝试在引号(“)和空格后添加\ 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

寻找解决方案,而不会删除任何字符。

3 个答案:

答案 0 :(得分:1)

您尝试过的正则表达式[\d\w]"几乎可以,但是有些短处。您无需在字符集中用\d来写\w,因为这是多余的,因为\w中已经包含\d。由于仅\w就足以表示字母,数字或下划线,因此无需将其括在字符集[]中,因此您只需编写\w,更新后的正则表达式就变成{{1 }}。

但是现在,如果您将此正则表达式匹配并用\w"代替,它将匹配文字字母\n,然后匹配t和一个空格,并且将其替换为"这就是为什么得到此输出的原因,

\n

您需要在group1中捕获匹配的字符串,并且在替换时需要在替换时使用它,以便不会被替换,因此您应该使用SecurityInciden\nRowID 作为替换,而不仅仅是\1\n < / p>

尝试此更新的正则表达式,

\n

并用(\w" )

替换

Demo1

如果您注意到第一行的行尾有多余的空间,并且如果您不希望在该行中有该空间,则可以从那些捕获括号的空间中删除该空间并使用此正则表达式,

\1\n

Demo2

这是示例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)" 

Regex demo | Python demo

例如:

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"