Шаблон регулярного выражения для поиска нескольких вхождений слов и захвата только второго совпадающего

#regex #notepad

Вопрос:

Я хочу зафиксировать второе вхождение, используя шаблон регулярных выражений в notepad , который является «Только Флорида; Западная Вирджиния; округ Колумбия».

  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  
 

Ответ №1:

Вы можете использовать негативный взгляд, утверждающий, что больше не будет случаев Флориды справа.

Только для совпадения вам не нужна группа захвата. Также F и D не нужно спасаться бегством.

 bFloridab(?!.*bFloridab).*
 

Демонстрация регулярных выражений

Или, при необходимости, сопоставьте первое вхождение и захватите со второго вхождения в группе захвата.

 ^(?:.*?bFloridab)?.*?b(Floridab.*)
 

Демонстрация регулярных выражений

Комментарии:

1. он работает с regex101.com и Notepad , но он не работает с REGEXP_SUBSTR SQL, то значение в моей данных на 30 с разделителем (;), я нашел подход, как это «^[^;]*;[^;]*;[^;]*;[^;]*;[^;]*;[^;]*;[^;]*;[^;]*;[^;]*;[^;]*;[^;]*;[^;]*;[^;]*;[^;]*;[^;]*;[^;]*;[^;]*;[^;]*;[^;]*;[^;]*;[^;]*;[^;]*;[^;]*;[^;]*;[^;]*;[^;]*;[^;]*;[^;]*;[^;]*;([^;]*)» есть ли способ, чтобы сократить шаблон? Это фиксируется до 30-го (;), но это длинная модель.

2. Попробуйте сделать это так и получите значение из группы захвата 2 ^([^;]*;){29}([^;]*)

3. Привет @Четвертая птица, это работает. Спасибо.

Ответ №2:

(?:.*)(Florida.*) Работает ли это на вас?

Он «соответствует» некоторым вещам, но только «захватывает» последнюю Флориду и после этого.

Я проверил это на https://regex101.com/r/cWqhkC/1.

Комментарии:

1. Привет @AaronJ спасибо вам за это, идея есть, но если Флорида встречается один раз, это не так match…it может быть также зафиксировано первое появление справа…

2. Я использую это регулярное выражение regexpal.com/1926, «Флорида.*(Флорида.*)» этот шаблон соответствует первому слову, а не только второму слову…

3. Это требование было неясно в вопросе. https://regex101.com/r/cWqhkC/1 Работает ли это на вас?