我需要在大型文本语料库中将所有出现的“W32 L30”替换为“W32in L30in”。 W,L之后的数字也各不相同。
我想过使用这个正则表达式
[W]([-+]?\d*\.\d+|\d+)
[L]([-+]?\d*\.\d+|\d+)
但是这些只能在每个W和L之后找到数字,所以更换每一个事件仍然是费力且非常耗时的,所以我想知道是否有办法在正则表达式中直接执行此操作。
答案 0 :(得分:2)
您可以使用捕获组并简化正则表达式。接下来,我们可以使用 backref 进行替换。像:
import re
RGX = re.compile(r'([WL]([-+]?\d*\.\d+|\d+))(in)?')
result = RGX.sub(r'\1in', some_string)
\1
用于引用第一个捕获组:我们使用[WL]([-+]?\d*\.\d+|\d+)
捕获的字符串的结果。最后一部分(in)?
也可选地匹配单词in
,以便在已经存在in
的情况下,我们只需将其替换为相同的值。
所以如果some_string
是例如:
>>> some_string
'A W2 in C3.15 where L2.4in and a bit A4'
>>> RGX.sub(r'\1in', some_string)
'A W2in in C3.15 where L2.4in and a bit A4'