[FORKING] Python Regex - Re.Sub и Re.Findall Интересные задачи - PullRequest
2 голосов
/ 26 марта 2019

Не уверен, что это то, что должно быть щедростью.Я просто хочу лучше понять регулярное выражение.

Я проверил ответы в регулярном выражении на совпадение с pattern.one пропускает символы новой строки и символы до тех пор, пока pattern.two и Regex не совпадут, если дан текстне найден и соответствует как можно меньшему количеству потоков и прочитал о Tempered Greedy Token Solutions и Explicit Greedy Alternation Solutions в RexEgg, но по общему признанию объяснения сбили меня с толку.

Последний день я потратил в основном на re.sub(и с помощью findall), потому что поведение re.sub для меня странно.

.

Задача 1:

Ниже приведены строки с символами, за которыми следует/ как бы я создал одно регулярное выражение (используя только re.sub или re.findall), использующее чередующиеся группы захвата, которые должны использовать [\S]+/, чтобы получить желаемый результат

>>> string_1 = 'variety.com/2017/biz/news/tax-march-donald-trump-protest-1202031487/'
>>> string_2 = 'variety.com/2017/biz/the/life/of/madam/green/news/tax-march-donald-trump-protest-1202031487/'
>>> string_3 = 'variety.com/2017/biz/the/life/of/news/tax-march-donald-trump-protest-1202031487/the/days/of/our/lives'

Желаемый результат с учетом условий (!!)

tax-march-donald-trump-protest-

УСЛОВИЯ: должны использовать чередующиеся группы захвата, которые должны захватывать ([\S]+) или ([\S]+?)/, чтобы захватить другие группы, но игнорировать их, еслиони не содержат-

Я ХОРОШО ЗНАЮ, что было бы лучше использовать re.findall('([\-]*(?:[^/]+?\-)+)[\d]+', string) или что-то подобное, но я хочу знать, могу ли я использовать [\S]+ или ([\S]+) или([\S]+?)/ и скажите регулярному выражению, что если они захвачены, игнорируйте результат, если он содержит / или не содержит -, хотя также использовал чередующуюся группу захвата

IЯ знаю, что мне не нужно использовать [\S]+ или ([\S]+), но я хочу посмотреть, есть ли дополнительная директива, которую я могу использовать, чтобы заставить регулярное выражение отклонять некоторые символы, которые эти два обычно захватывали бы.

Ответы [ 2 ]

2 голосов
/ 26 марта 2019

Отправлено по запросу:

(?:(?!/)[\S])*-(?:(?!/)[\S])*

https://regex101.com/r/azrwjO/1

Объяснено

 (?:                           # Optional group
      (?! / )                       # Not a forward slash ahead
      [\S]                          # Not whitespace class
 )*                            # End group, do 0 to many times
 -                             # A dash must exist
 (?:                           # Optional group,  same as above
      (?! / )
      [\S] 
 )*
1 голос
/ 26 марта 2019

Вы можете использовать

/([-a-z]+)-\d+

и возьмите первую группу захвата, см. демонстрацию на regex101.com .

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