Python ReXEX用于替换字母数字串中间的数字,但不是在结尾
我有以下字符串:Python ReXEX用于替换字母数字串中间的数字,但不是在结尾,python,regex,Python,Regex,我有以下字符串: aaaaaaa0aaa bbbbbbb0bbbbbb cccccc 2.0 我需要用前面的2个字符串中的0个替换,比如X。如果我使用正则表达式r'[0].则从前两个字符串中选择“0a”和“0b”。如何只从前两个字符串中选择“0”,而避免最后一个字符串中的“0”在这里,我们可以收集字母,然后将一个字母作为要替换的数字的左边界,然后为安全起见将另一个字母放在数字后面,并继续捕获字符串末尾的字母,最后将数字替换为$1x$3: (.+[a-z])([0-9]+)([a-z].+)
aaaaaaa0aaa
bbbbbbb0bbbbbb
cccccc 2.0
我需要用前面的2个字符串中的0个替换,比如X。如果我使用正则表达式
r'[0].
则从前两个字符串中选择“0a”和“0b”。如何只从前两个字符串中选择“0”,而避免最后一个字符串中的“0”在这里,我们可以收集字母,然后将一个字母作为要替换的数字的左边界,然后为安全起见将另一个字母放在数字后面,并继续捕获字符串末尾的字母,最后将数字替换为$1x$3
:
(.+[a-z])([0-9]+)([a-z].+)
正则表达式
如果不需要此表达式,可以在中对其进行修改或更改
正则表达式电路
可视化正则表达式:
试验
演示
const regex=/(.+[a-z])([0-9]+)([a-z].+)/gm;
常量str=`aaaaaa0aaa
bbbbbbb0bbbbbbbbbb
中交2.0`;
常量subst=`1x$3`;
//被替换的值将包含在结果变量中
const result=str.replace(regex,subst);
log('替换结果:',结果)代码>这取决于你想变得多么贪婪。越严格越好,但是像这样的[a-zA-Z](0)[a-zA-Z]
可以很好地工作,假设您总是希望将0
作为目标,并且它将被一个字母字符(a-zA-Z)显式包围
您可以在此处使用它并查看它的工作情况:您可以使用\B
在匹配的0
周围声明非单词边界:
\B0\B
演示:
像r'0(?=)'
中那样简单的正向前瞻就足够了。使用python
import re
s = '''aaaaaaa0aaa
bbbbbbb0bbbbbb
cccccc 2.0'''
re.sub(pattern=r'0(?=.)', string=s, repl='x')
Out[743]: '\n aaaaaaaxaaa\n bbbbbbbxbbbbbb\n cccccc 2.0'
只需匹配0:0(.)
之后的任何内容,并替换为x$1
如果零后面有一个字符,它将只与零匹配,并将其替换为“x”和该字符
请参阅解决方案谢谢您的详细解释,但我正在寻找类似于公认答案的答案。干杯
>>> import re
>>> s = '''aaaaaaa0aaa
... bbbbbbb0bbbbbb
... cccccc 2.0'''
>>> print(re.sub(r'\B0\B', 'x', s))
aaaaaaaxaaa
bbbbbbbxbbbbbb
cccccc 2.0
>>>
import re
s = '''aaaaaaa0aaa
bbbbbbb0bbbbbb
cccccc 2.0'''
re.sub(pattern=r'0(?=.)', string=s, repl='x')
Out[743]: '\n aaaaaaaxaaa\n bbbbbbbxbbbbbb\n cccccc 2.0'