简体   繁体   中英

Regular Expression to replace text inside tags in Notepad++

Hivemind!

I am trying to edit Memsource *.mxliff files with Notepad++.
When I create a search task, both source and target lines mix up in a huge list.
But I need to make amendments only for lines inside <target>.../<target> tags.

For example:

1. <target>от 15 до 35 °C</target>
2. <target>Допустимый диапазон температур воздуха от -40 °C до +70 °C {1&gt;1)&lt;1}</target>  

Inside these lines I need to replace all instances of degrees with a non-breaking space version:

Find: (\\d) °C
Replace with: $1 $2

What is the most optimal way to do so?
Any hints would be much appreciated. Thanks a lot!

  • Ctrl + H
  • Find what: (?:<target>|\\G)(?:(?!target)[\\s\\S])*?\\K(\\d+)\\s*(°C)(?=.*</target>)
  • Replace with: $1&nbsp;$2
  • CHECK Match case
  • CHECK Wrap around
  • CHECK Regular expression
  • UNCHECK . matches newline . matches newline
  • Replace all

Explanation:

(?:                         # non capture group
    <target>                # opening tag
  |                         # OR
    \G                      # restart from last match position
)                           # end group
(?:(?!target)[\s\S])*?      # 0 or more any character but not "target"
\K                          # forget all we have seen until this position
(\d+)                       # group 1, 1 or more digits
\s*                         # 0 or more spaces
(°C)                        # group 2
(?=.*</target>)             # must be followed by </target>

Replacement:

$1              # content of group 1 (i.e. the temperature)
&nbsp;          # non breaking space
$2              # content of group 2 (i.e. °C)

Screen capture (before):

在此处输入图片说明

Screen capture (after):

在此处输入图片说明

Assuming that we'd have one °C in a target tag, maybe some expression similar to:

(<\s*target\s*>[\s\S]*?\d)\s+(°C[\s\S]*?<\s*\/target\s*>)

and replaced with,

$1$2

might be OK to look into.

RegEx Demo


If you wish to simplify/update/explore the expression, it's been explained on the top right panel of regex101.com . You can watch the matching steps or modify them in this debugger link , if you'd be interested. The debugger demonstrates that how a RegEx engine might step by step consume some sample input strings and would perform the matching process.


Short alternative as always ....
Find what: (\\d+) (?=°C)
Replace all with: $1NBSP
Done!

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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