每次在字符串中找到正则表达式列表的模式时,如何添加新行?
我正在使用python 3.6。
我得到以下输入:
12.13.14应该在这里开始新的一行。
12.13.15应该在这里开始新的一行。
这是一些文字。它用一行编写。 12.13。这是更多文本。 2.12.14。这里还有更多文字。
我希望获得以下输出:
12.13.14
应该在这里开始新的一行。
12.13.15
应该在这里开始新的一行。
这是一些文字。它用一行编写。
12.13。
这里还有更多文字。
2.12.14。
这里还有更多文字。
我的第一次尝试返回的结果与输入相同:
Curl
第二次尝试返回错误'TypeError:+不支持的操作数类型:'_sre.SRE_Pattern'和'str'
in_file2 = 'work1-T1.txt'
out_file2 = 'work2-T1.txt'
start_rx = re.compile('|'.join(
['\d\d\.\d\d\.', '\d\.\d\d\.\d\d','\d\d\.\d\d\.\d\d']))
with open(in_file2,'r', encoding='utf-8') as fin2, open(out_file2, 'w', encoding='utf-8') as fout2:
text_list = fin2.read().split()
fin2.seek(0)
for string in fin2:
if re.match(start_rx, string):
string = str.replace(start_rx, '\n\n' + start_rx + '\n')
fout2.write(string)
答案 0 :(得分:1)
尝试一下
out_file2=re.sub(r'(\d+) ', r'\1\n', in_file2)
out_file2=re.sub(r'(\w+)\.', r'\1\.\n', in_file2)
答案 1 :(得分:1)
首先,要搜索并用正则表达式替换,您需要使用re.sub
,而不是str.replace
。
第二,如果您使用re.sub
,则不能在替换模式中使用正则表达式模式,需要对要保留的正则表达式部分进行分组,并在替换中使用反向引用(或者,如果您只想引用整个匹配项,请使用\g<0>
反向引用,不需要捕获组。
第三,当您建立一个非锚定的交替模式时,请确保首先使用更长的替代方案,即start_rx = re.compile('|'.join(['\d\d\.\d\d\.\d\d', '\d\.\d\d\.\d\d', '\d\d\.\d\d\.']))
。但是,您可以在此处手动使用更精确的模式。
这是固定代码的方式:
with open(in_file2,'r', encoding='utf-8') as fin2, open(out_file2, 'w', encoding='utf-8') as fout2:
text = fin2.read()
fout2.write(re.sub(r'\s*(\d+(?:\.\d+)+\.?)\s*', r'\n\n\1\n', text))
请参见Python demo
模式是
\s*(\d+(?:\.\d+)+\.?)\s*
请参见regex demo
详细信息
\s*
-超过0个空格(\d+(?:\.\d+)+\.?)
-组1(替换模式中为\1
):
\d+
-1个以上数字(?:\.\d+)+
-1个或多个.
和1个以上的数字重复\.?
-可选的.
\s*
-超过0个空格