如何使用正则表达式匹配波浪线分隔的数据

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+ 将匹配一个或多个数字。