在regex函数中使用regex作为替换?

2024-10-02 18:28:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用regex函数来实现以下目标我的输入如下所示:

A:L1, A:K2, A:E3, A:A4, A:E5, A:H7,
,EHKKDH,6,LKEAELH,7

我想写一个正则表达式函数,将

,EHKKDH,6,LKEAELH,7
to:
,EHKKDH,6,
 (blankline)
 LKEAELH,7

我的功能是找到我想要分开的东西:

import re
with open ('masterfile.txt', 'r' ) as f:
content = f.read()
y=str(content)
badpattern= re.compile(r'\d,\w')
goodpattern=re.compile(r'\d,\n\w')
x = re.sub(badpattern,goodpattern,y)
print(x)

当我在替换点使用goodpattern时,出现以下错误。你知道吗

 File "myprogram.py", line 55, in <module>
x = re.sub(badpattern,goodpattern,y)
File "/Users/Jay/anaconda3/lib/python3.7/re.py", line 192, in sub
return _compile(pattern, flags).sub(repl, string, count)
File "/Users/Jay/anaconda3/lib/python3.7/re.py", line 309, in _subx
template = _compile_repl(template, pattern)
File "/Users/Jay/anaconda3/lib/python3.7/re.py", line 300, in 
_compile_repl
return sre_parse.parse_template(repl, pattern)
File "/Users/Jay/anaconda3/lib/python3.7/sre_parse.py", line 954, in parse_template
s = Tokenizer(source)
File "/Users/Jay/anaconda3/lib/python3.7/sre_parse.py", line 228, in __init__
string = str(string, 'latin1')
TypeError: decoding to str: need a bytes-like object, re.Pattern found

否则,我的代码可以工作,如果我将字符串“works”放在goodpattern所在的位置,我将得到以下输出:

,EHKKDH,worksKEAELH,7

我需要能够使用正则表达式来做这些替换。图案永远是数字,字母

另外,如何附加这些更改以替换原始文件中的匹配项?我理解替换方法。然而,我有一个可怕的时间使用回复sub即使查阅了手册。谢谢你的帮助!你知道吗


Tags: inpyreparseliblinetemplaterepl
2条回答

我通常使用站点regexr.com来构造这种正则表达式。你知道吗

不管怎样,正如您所说,模式是word,number,。你知道吗

将此更改为正则表达式:

word->;\w+[a-zA-Z]+\w也将包括数字,[a-zA-Z]将只匹配字符AZaz。添加+以匹配至少一个字符。)

,->;,

number->;\d+

最后的正则表达式将是[a-zA-Z]+,\d+,。你知道吗

re.sub的第二个参数,替换字符串,必须是一个字符串,而不是另一个正则表达式。在您的情况下,应该在要插入换行符的位置前后使用捕获组(如果需要空行,则使用两个),以便可以使用反向引用在替换字符串中引用它们:

x = re.sub(r'(\d,)(\w)', r'\1\n\2', y)

相关问题 更多 >