regex 如何跳过整数后面反斜杠?

uoifb46i  于 2023-01-21  发布在  其他
关注(0)|答案(4)|浏览(120)

我有正则表达式https://regex101.com/r/2H5ew6/1

(\!|\@)(1) 

Hello!1 World

我想拿第一分!|@)并将数字1更改为另一个数字2

{\1}2_
\1\\2_

但它添加了额外的文本,我只是想改变数字
我希望结果是

Hello!2_World

如果“是”

Hello@2_World
fv2wmkja

fv2wmkja1#

匹配并捕获命名捕获组(此处称为char)中的!@(如果后面跟有一个或多个数字和一个空格):

(?P<char>[!@])\d+\s

替换为指定的捕获,\g<char>后跟2_

\g<char>2_

Demo
如果您只希望在!@后面有1时进行替换,请将\d+替换为1

zour9fqk

zour9fqk2#

在替换中,您需要将{\1}2_更改为2_

string = "Hello!1 World"
pattern = "(\!|\@)(1)"
replacement = "2_"
result = re.sub(pattern, replacement, string)
y1aodyip

y1aodyip3#

为什么不:string.replace('!1 ', '!2_').replace('@1 ', '@2_')

>>> string = "Hello!1 World"
>>> repl = lambda s: s.replace('!1 ', '!2_').replace('@1 ', '@2_')
>>> string2 = repl(string)
>>> string2
'Hello!2_World'
>>> string = "Hello!12 World"
>>> string2 = repl(string)
>>> string2
'Hello!12 World'
scyqe7ek

scyqe7ek4#

替换模式应为\g<1>2_
Regex demo
您还可以将模式缩短为包含character class[!@]和match的单个捕获,并使用与上面相同的替换。
([!@])1
Regex demo
或者使用不带任何组的lookbehindAssert,并替换为2_
(?<=[!@])1
Regex demo

相关问题