我想在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)
答案 0 :(得分:1)
您可以使用backreferences来解决问题。以下是使用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'
(?P<br1>[0-9]+)
- 这将给定组(在括号中)标记为br1。
\g<br1>
- 这有助于使用其名称将引用回br1组。
有关语法的详细信息,请参阅官方文档 - re.sub。
答案 1 :(得分:1)
使用捕获组:
>>> re.sub(r'::\[Node1]B(\d+):(\d+)/(\d+)', r'::[Node1]B\1[\2].\3', s)
'::[Node1]B81[72].0'
答案 2 :(得分:1)
一些观点:
简而言之,请尝试以下代码:
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))