Почему мой код не работает в Python Regex при извлечении строки - PullRequest
1 голос
/ 05 ноября 2019

Попытка извлечь строку и цифру из строки, но не работает, как ожидалось

s = '''
text1
text2
http://url.com/bla1/blah1/text22
text3
'''
import re
re.findall(r'(^http.*|text\d+)',s)

Мой выход, мысль была ^ http не будет считать строку

['text1', 'text2', 'text22', 'text3']

Ожидается

['text1', 'text2', 'text3']

Отказ от ответственности, пожалуйста, не делайте 're.sub(r'http\S+', '', s)'

Ответы [ 3 ]

2 голосов
/ 05 ноября 2019

Я подозреваю, что вы пытаетесь найти все text\d+ в любом месте строки, кроме строк, начинающихся с http (иначе я не мог придумать причину этой дополнительной http проверки, если вы просто хотите text в начале строки)

Если это так, вы можете использовать: ^(?!http).*(text\d+). Первая группа захвата - это то, что вам нужно

Python's re.findAll возвращает содержимое группы захвата:

s = '''
text1
text2
http://url.com/bla1/blah1/text22
text3
xyz text4
text555
'''
re.findall(r'^(?!http).*(text\d+)', s, flags=re.MULTILINE)
# ['text1', 'text2', 'text3', 'text4', 'text555']
1 голос
/ 05 ноября 2019
re.findall(r'(^text\d+)',s, flags=re.MULTILINE) Use this code at the place of
re.findall(r'^(?!http).*(text\d+)', s, flags=re.MULTILINE)
1 голос
/ 05 ноября 2019

Попробуйте использовать эту однострочную строку, чтобы определить, находится ли она в начале строки, я добавляю флаг re.MULTILINE, чтобы он пытался соответствовать каждой строке:

print(re.findall('^text\d+',s, flags=re.MULTILINE))

Вывод:

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