使用python';s re.sub正则表达式来替换字符串

使用python';s re.sub正则表达式来替换字符串,python,regex,python-3.x,Python,Regex,Python 3.x,我想在java代码中查找并替换以下代码段 ::[Node1]N81:157-->::[Node1]N81[157] ::[Node1]B81:72/0-->::[Node1]B81[72].0 157、72和0可能是动态的,因此可能有其他值 我有一些模式可以找到我的表达,但我不知道我是否可以改进它。无论如何,我不知道如何替换,我只知道如何找到模式,如下所示: re.sub("::\[Node1]N[0-9]+:[0-9]+",'here I should put how to re

我想在java代码中查找并替换以下代码段

::[Node1]N81:157-->::[Node1]N81[157]
::[Node1]B81:72/0-->::[Node1]B81[72].0
157、72和0可能是动态的,因此可能有其他值

我有一些模式可以找到我的表达,但我不知道我是否可以改进它。无论如何,我不知道如何替换,我只知道如何找到模式,如下所示:

re.sub("::\[Node1]N[0-9]+:[0-9]+",'here I should put how to replace' , s)       
re.sub("::\[Node1]B[0-9]+:[0-9]+/[0-9]+",'here I should put how to replace' , s)
你可以用它来解决你的问题。下面是如何使用
re.sub
-

In [1]: a = '::[Node1]N81:157'

In [2]: re.sub('::\[Node1\]N81:(?P<br1>[0-9]+)', '::[Node1]N81:[\g<br1>]', a)
Out[2]: '::[Node1]N81:[157]'


In [3]: b = '::[Node1]B81:72/0'

In [4]: re.sub('::\[Node1\]B81:(?P<br1>[0-9]+)/(?P<br2>[0-9]+)', '::[Node1]B81[\g<br1>].\g<br2>', b)
Out[4]: '::[Node1]B81[72].0'
[1]中的
:a='::[Node1]N81:157'
在[2]:re.sub(':\[Node1\]N81:(?P[0-9]+),':[Node1]N81:[\g]',a)
Out[2]:'::[Node1]N81:[157]'
在[3]中:b='::[Node1]B81:72/0'
在[4]:re.sub(':\[Node1\]B81:(?P[0-9]+)/(?P[0-9]+),'::[Node1]B81[\g]。\g',b)
Out[4]:'::[Node1]B81[72]。0'
(?p[0-9]+)
-将给定组(括号中)标记为br1

\g
-这有助于使用br1组的名称返回

有关语法的更多信息,请参阅官方文档-。

使用捕获组:

>>> re.sub(r'::\[Node1]B(\d+):(\d+)/(\d+)', r'::[Node1]B\1[\2].\3', s)
'::[Node1]B81[72].0'
有几点:

  • 我喜欢逃避“[”和“]”
  • 使用/d代替[0-9]
  • 我也希望尽可能具体,所以{m,n}是长度特定的
  • 最后,看一看组替换
  • 简而言之,请尝试以下代码:

    print(re.sub("(::\[Node1\]N\d{2}):(\d{2,3})", "\g<1>[\g<2>]", s))
    print(re.sub("(::\[Node1\]B\d{2}):(\d{2,3})/(\d{1})", "\g<1>[\g<2>].\g<3>", s))
    
    print(re.sub((:\[Node1\]N\d{2}):(\d{2,3})”,“\g[\g]”,s))
    打印(re.sub((:\[Node1\]B\d{2}):(\d{2,3})/(\d{1})”,“\g[\g]。\g”,s))
    
    例如,使用表达式B。。。工作正常,但表情不好。。。工作方式如下:::[Node1]N81:45取而代之::[Node1]N81[45]。谢谢。我会看看后面的参考资料。谢谢