【问题标题】:Regex pattern to search multiple word occurrences and capture the second matched only正则表达式模式搜索多个单词出现并仅捕获第二个匹配
【发布时间】:2021-11-13 05:10:02
【问题描述】:

我想在 notepad++ 中使用 REGEX 模式捕获第二次出现,即“佛罗里达;西弗吉尼亚;仅限 DC。”

 Notepad++
 1 Arkansas; Hawaii; South Dakota; North Carolina
 2 California;Florida; Washington State; New York; Florida; West Virginia; DC
 3 Nevada; Texas; New Mexico; Georgia   


Regex Pattern: '\Florida(.*?)\DC'

Actual Capture: Florida; Washington State; New York; Florida; West Virginia; DC
Desired Capture: Florida; West Virginia; DC  

【问题讨论】:

    标签: regex notepad++


    【解决方案1】:

    (?:.*)(Florida.*) 适合你吗?

    它“匹配”了一些东西,但只“捕获”了最后一个佛罗里达州和之后。

    我在https://regex101.com/r/cWqhkC/1 测试了这个。

    【讨论】:

    • 嗨@AaronJ,谢谢你,这个想法是存在的,但如果佛罗里达是单次出现,它不匹配......它也可以从右边捕获第一个出现......
    • 我正在使用这个正则表达式 regexpal.com/1926, 'Florida.*(Florida.*)' 这个模式只匹配第一个单词而不是第二个单词...
    • 该要求在问题中不清楚。 https://regex101.com/r/cWqhkC/1 对你有用吗?
    【解决方案2】:

    您可以使用否定前瞻断言右侧不再出现佛罗里达州。

    仅对于匹配项,您不需要捕获组。 \F 和 \D 也不必转义。

    \bFlorida\b(?!.*\bFlorida\b).*
    

    Regex demo

    或者可选地匹配第一个匹配项,然后在捕获组中从第二个匹配项开始捕获。

    ^(?:.*?\bFlorida\b)?.*?\b(Florida\b.*)
    

    Regex demo

    【讨论】:

    • 它适用于 regex101.com 和 notepad++ 但它不适用于 REGEXP_SUBSTR SQL,我的数据中的实际值是从分隔符 (;) 开始的第 30 位,我找到了这样的方法 "^[ ^;]*;[^;]*;[^;]*;[^;]*;[^;]*;[^;]*;[^;]*;[^;]*;[^; ]*;[^;]*;[^;]*;[^;]*;[^;]*;[^;]*;[^;]*;[^;]*;[^;]* ;[^;]*;[^;]*;[^;]*;[^;]*;[^;]*;[^;]*;[^;]*;[^;]*;[ ^;]*;[^;]*;[^;]*;[^;]*;([^;]*)" 有没有办法缩短模式?这会捕获到第 30 个 (;) 但它是一个很长的模式。
    • 像这样尝试并从捕获组2中获取值^([^;]*;){29}([^;]*)
    • 嗨@第四只鸟,它有效。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2010-12-03
    • 2015-02-03
    • 2019-03-13
    • 1970-01-01
    • 1970-01-01
    • 2017-07-08
    相关资源
    最近更新 更多