【问题标题】:How to Match Tilde-Delimited Data Using Regex如何使用正则表达式匹配波浪号分隔的数据
【发布时间】:2020-09-03 14:53:38
【问题描述】:

我有这样的数据:

~10~682423~15~Test Data~10~68276127~15~More Data~10~6813~15~Also Data~

我正在尝试使用 Notepad++ 查找标签 10(682423、68276127、6813)中的值并将其替换为零。我认为下面的语法会起作用,但它选择了我想要的文本的第一次出现和该行的其余部分,而不仅仅是我想要的文本(例如~10~682423~)。我还尝试了数十种在线搜索的变体,但它们要么做同样的事情,要么不返回任何结果。

~10~.*~

【问题讨论】:

  • 我想用零替换标签 10(682423、68276127、6813)中的值。也添加到原始描述中。谢谢。
  • It works 给我
  • 谢谢@Asocia,是的,这行得通。而且非常简单。非常感谢!

标签: regex notepad++ tilde


【解决方案1】:

使用

\b10~\d+

替换为10~0。见proof\b10~ 将捕获 10 作为整数(210 中不允许匹配),\d+ 将匹配一个或多个数字。

【讨论】:

  • @CarySwoveland 我删除了捕获组,我听取了您的建议。
  • Stack Overflow 之前的生活是怎样的?这对我来说几乎是完美的。唯一的变化是在开头包含另一个波浪号,以确保我只选择标签10。如果没有前导波浪号,任何以数字 10 结尾的字段都将被选中。这是最终结果:~\b10~\d+。谢谢!
  • @Jawann ~\b10~\d+~10~\d+ 相同,因为 ~ 不是单词字符。
【解决方案2】:

您可以使用:(?<=~10~)\d+(?=~) 并替换为 0。这使用环视检查 ~10~ 是否在数字序列之前,(?=~) 确保 ~ 在数字序列之后。如果~10~ 字段后面有任何字符,请使用(?<=~10~)[^~]+(?=~)

~10~.*~ 的问题在于 * 是贪婪的,所以它只会在匹配任何字符和 ~ 时吃掉。

【讨论】:

  • 这很完美,甚至比我预期的还要优雅。您对我的策略为何不起作用的解释非常有帮助。去表明我有很多关于正则表达式的知识。我选择了另一个答案,因为这是我使用的答案,但从长远来看,这个答案将有助于提高我的技能。谢谢!
猜你喜欢
  • 1970-01-01
  • 2021-05-31
  • 1970-01-01
  • 2012-06-22
  • 2010-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多