如何使用正则表达式匹配波浪线分隔的数据
How to Match Tilde-Delimited Data Using Regex
我有这样的数据:
~10~682423~15~Test Data~10~68276127~15~More Data~10~6813~15~Also Data~
我正在尝试使用 Notepad++ 查找标记 10 (682423、68276127、6813) 中的值并将其替换为零。我认为下面的语法会起作用,但它选择了我想要的文本的第一次出现 和行的其余部分 ,而不仅仅是我想要的文本 (~10~682423~
,例如)。我也尝试了很多在线搜索的变体,但他们要么做同样的事情,要么不会 return 任何结果。
~10~.*~
您可以使用:(?<=~10~)\d+(?=~)
并替换为 0
。这使用环视来检查 ~10~
是否在数字序列之前,并且 (?=~)
确保 ~
在数字序列之后。如果任何字符可以在 ~10~
字段之后,请使用 (?<=~10~)[^~]+(?=~)
.
~10~.*~
的问题是 *
是贪婪的,所以它只是吞噬匹配任何字符和 ~
.
使用
\b10~\d+
替换为10~0
。参见 proof。 \b10~
将捕获 10
作为整数(不允许 210
中的匹配项)并且 \d+
将匹配一个或多个数字。
我有这样的数据:
~10~682423~15~Test Data~10~68276127~15~More Data~10~6813~15~Also Data~
我正在尝试使用 Notepad++ 查找标记 10 (682423、68276127、6813) 中的值并将其替换为零。我认为下面的语法会起作用,但它选择了我想要的文本的第一次出现 和行的其余部分 ,而不仅仅是我想要的文本 (~10~682423~
,例如)。我也尝试了很多在线搜索的变体,但他们要么做同样的事情,要么不会 return 任何结果。
~10~.*~
您可以使用:(?<=~10~)\d+(?=~)
并替换为 0
。这使用环视来检查 ~10~
是否在数字序列之前,并且 (?=~)
确保 ~
在数字序列之后。如果任何字符可以在 ~10~
字段之后,请使用 (?<=~10~)[^~]+(?=~)
.
~10~.*~
的问题是 *
是贪婪的,所以它只是吞噬匹配任何字符和 ~
.
使用
\b10~\d+
替换为10~0
。参见 proof。 \b10~
将捕获 10
作为整数(不允许 210
中的匹配项)并且 \d+
将匹配一个或多个数字。