Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python ReXEX用于替换字母数字串中间的数字,但不是在结尾_Python_Regex - Fatal编程技术网

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'