3

I want to find and replace the following code snippet in java code.

::[Node1]N81:157-->::[Node1]N81[157]
::[Node1]B81:72/0-->::[Node1]B81[72].0

157 and 72 and 0 could be dynamic so maybe could have other values.

I have some pattern to find my expression but I don't know if I could improve it. Anyway, I don't know how to replace I only know the way to find the pattern as follows:

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)

3 Answers 3

1

Use a capturing group:

>>> re.sub(r'::\[Node1]B(\d+):(\d+)/(\d+)', r'::[Node1]B\1[\2].\3', s)
'::[Node1]B81[72].0'
Sign up to request clarification or add additional context in comments.

1 Comment

For example with expression B... was working properly but with expression N... was working as follow: ::[Node1]N81:45 instead ::[Node1]N81[45]. Thanks.
1

some points:

  1. I like to escape both '[' and ']'
  2. Use /d instead of [0-9]
  3. I also like to be as specific as possible so {m,n} to be length specific
  4. Finally, have a look at this for group substitutions

In short, try the following code:

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

Comments

1

You can use backreferences to solve your problem. Here is how your problem can be solved using 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]+) - This tags the given group (in parenthesis) as br1.

\g<br1> - This helps to refer back to the br1 group, using its name.

For more info regarding the syntax, you can refer to the official docs - re.sub.

1 Comment

I will take a look to the back references. Thanks.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.