Regex для извлечения строки между вторым экземпляром одного символа и вторым экземпляром другого - PullRequest
0 голосов
/ 19 сентября 2019

Я хочу извлечь a.test из поля со следующей структурой: this-is-a.test.sentence, что означает, что результат начинается со второго экземпляра - и заканчивается во втором экземпляре . не включительно.Я вижу, как этого добиться, когда персонажи одинаковы, но не когда они разные?

Ответы [ 2 ]

1 голос
/ 19 сентября 2019

Попробуйте это: ^.*?-.*?-(.*?\..*?)\.

Объяснение:

^    : [^] represents the beginning of the string
.*?- : [.] is any character except line breaks, 
       [*] matches 0 or more (aka optional), 
       [?] makes it lazy meaning it will match as few characters as possible.
       [-] matches a literal '-' character
.*?-.*?- : doing this pattern twice will match the following: '--', 'ANY-THING-', '-ANYTHING-', 
                                                              'TWO-DASHES-', 'TWODASHES--', etc.

(.*?\..*?)\. : ( ) wrapping a pattern makes it a capture group used to easily pull what you need
              [.*?] - same as above (lazy, optional character(s))
              [\.]  - escaped literal '.' character (#1)
              [.*?] - same as above (lazy, optional character(s)) again
              [\.]  - escaped literal '.' character (#2) - notice it's outside our capture group 
                                                           to make it non-inclusive

Используя это, желаемая строка --.some.thing. вернет что-либо от первой точки ко второму экземпляру точки,только захват первой точкиСтроки сопоставляются только в том случае, если есть две черты и две или более точек после черточек.Вот несколько тестов:

this-is-a.test.sentence -- matches // group 1: 'a.test'
any-thing-some.thing.cool -- matches // group 1: 'some.thing'

anything-some.thing.cool -- doesn't match because there is only one dash 
any-thing-some.thingcool -- doesn't match because there is only one dot
any.thing-some.thing-cool -- doesn't match because the dashes and dots are out of order.
0 голосов
/ 19 сентября 2019

^.*?-.*?-(.*?\..*?)\. будет правильным регулярным выражением в этом случае.

Объяснение:

^ соответствует началу строки

.*?- соответствует чему-либо допервый / второй -

(.*?\..*?)\. будет что угодно до ., затем буквально ., а затем до следующего .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...