繁体   English   中英

使用python的re.sub正则表达式替换字符串

[英]Using python's re.sub regular expressions to replace strings

我想在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'

(?P<br1>[0-9]+) - 这将给定组(括号内)标记为br1。

\\g<br1> - 这有助于使用其名称返回 br1组。

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

使用捕获组:

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

一些要点:

  1. 我想逃避'['和']'
  2. 使用/ d代替[0-9]
  3. 我也希望尽可能具体,因此{m,n}具体取决于长度
  4. 最后,看看这个换组

简而言之,请尝试以下代码:

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))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM