【问题标题】:Regex to find fields contains semicolon in notepad++正则表达式查找字段在记事本++中包含分号
【发布时间】:2017-12-24 08:54:14
【问题描述】:

我有以下文件。

身份证;姓名;地址

"1";"abc";"xyz"

"2";"pqr";"xyz;aa"

"3";"aaa";"bbb"

用双引号封装并用分号分隔的字段。 我正在尝试查找包含分号的字段(在本例中为“xyz;aa”)。 它的正则表达式应该是什么?

【问题讨论】:

  • "(\w+;\w*|\w*;\w+)" 这不行吗?唯一没有匹配的情况是";"
  • 我对此做了一些小改动,在搜索中包含制表符和空格。即“([\w|\t|\s]+;[\w\t\s]*|[\w\t\s]*;[\w\t\s]+)”但是高亮所有文件。

标签: regex search notepad++


【解决方案1】:

这是一个可能对您有用的策略。首先,用逗号分隔符替换分号分隔符:

查找:

"(.*?)";

替换:

"$1",

现在您的数据集由逗号分隔的引号字段组成,其余的分号应该都在字段内。此时,对分号的简单查找应该会让您进入匹配的字段。

一般来说,您可能需要一个解析器。我的查找/替换技巧尝试通过一次转义每个字段并删除分号分隔符来模拟解析器将执行的操作。

【讨论】:

    【解决方案2】:

    试试这个:https://regex101.com/r/Z3Mnoz/2

    "[\da-z]+;[\da-z]+"

    【讨论】:

    • 字符串"2";"pqr";"xyz;"失败
    • 感谢您的快速回复.. 它适用于我的情况。但是如果字段在第一个 ex 中包含分号怎么办。 ";abcd"
    【解决方案3】:

    试试这个(与我在评论中写的有点不同):"((?:[\w\s]+;[\w\s]*)|(?:[\w\s]*;[\w\s]+))"。 我添加了\s,因为我看到你也需要它(\t 包含在\s 中)。

    【讨论】:

      【解决方案4】:

      试试这个(?!:")([a-z\d]+;)+([\da-z]+)?|([a-z\d]+)?(;([\da-z]+))+(?!:")

      可以匹配;aa;

      【讨论】:

        猜你喜欢
        • 2015-09-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-08
        • 1970-01-01
        • 2019-02-10
        • 2018-11-17
        相关资源
        最近更新 更多