【问题标题】:RegEx: Grabbing semicolon enclosed by quotation marks and at least one character正则表达式:抓取用引号括起来的分号和至少一个字符
【发布时间】:2019-05-20 12:21:09
【问题描述】:

我需要一个正则表达式(可在 notepad++ 中使用),它可以抓取用引号括起来的分号,并且引号和分号之间至少有一个字符。

  • 这个分号应该匹配:"asdf;a3"
  • 此分号不应匹配:";"

到目前为止,我有以下正则表达式:\"(.*?)\"

但是,这匹配引号之间的所有内容。我只需要分号作为匹配项。

感谢您的帮助。

【问题讨论】:

  • 你的意思是左右一个字符吗? "[^;]+(;)[^;]+ 使用捕获组?或"[^;]+\K;(?=[^;]+")
  • 是的,左右至少一个字符。

标签: regex csv notepad++


【解决方案1】:

您可以使用捕获组和 negated character class 不匹配任何列出的字符:

 "[^";]+(;)[^;"]+"

Regex demo

或者利用\K 忘记什么是macthed和一个积极的前瞻:

"[^;"]+\K;(?=[^;"]+")

Regex demo

要匹配双引号之间的多个分号,您可以使用\G

说明

(?:"|\G(?!^))[^";]+\K;(?=[^"]+")
  • (?:非捕获组
    • "匹配"
    • |或者
    • \G(?!^) 在上一场比赛结束时断言位置,而不是在开始时
  • )关闭非捕获组
  • [^";]+ 匹配 1+ 次而不是 "'
  • \K;忘记匹配的内容并匹配;
  • (?=[^"]+") 正向前瞻,断言右边是 1+ 次而不是 " 然后匹配 "

Regex demo

注意:如果您不想匹配换行符,可以将其添加到字符类 [^;"\r\n]

【讨论】:

  • 看起来不错,但是如果“左右至少一个字符”也可以是特殊字符呢。你能扩大你的答案吗?那我觉得我很好。
  • 您还可以扩展匹配多个分号吗?例如"asdf;asdf;asdf".
  • 也匹配特殊字符。否定字符类匹配那些。
  • 啊好吧,是的,你是对的。那么我的问题只是多个分号不匹配。所以"asdf;asdf;asdf"中的2个分号应该匹配。这可能吗?
  • 太棒了。这似乎涵盖了我所有的情况。感谢您的特殊帮助。答案已接受。
【解决方案2】:

试试这个正则表达式:

/.+?\;.+?/g

Here 是一个链接,可帮助您了解此正则表达式的流程。

Here 是显示此正则表达式演示的链接。

【讨论】:

    猜你喜欢
    • 2013-05-29
    • 2019-05-11
    • 1970-01-01
    • 1970-01-01
    • 2018-12-16
    • 2020-10-29
    • 1970-01-01
    • 2016-03-03
    相关资源
    最近更新 更多