Python Regex matcher, пока два символа не станут похожими на условие ИЛИ
Мой вопрос довольно прост, я пытаюсь придумать RE, чтобы выбрать любой набор слов или утверждений между двумя символами.
Например, строки выглядят примерно так:
') as whatever '
и это также может выглядеть
') as whatever\r\n'
Поэтому мне нужно извлечь "что угодно" из этой строки.
Regex, который я придумал, это:
\)\sas\s(.*?)\s
Он работает нормально и извлекает "что угодно", но это будет работать только для первого примера, а не для второго. Что мне делать в случае второго утверждения
Я в основном ищу условия ИЛИ!
Любая помощь будет оценена
заранее спасибо
2 ответа
Вопрос не очень понятен, но, возможно, искомый синтаксис регулярного выражения может выглядеть примерно так:
\)\sas\s(.*?)[\s | \r | \n]
в основном, говоря после интересующей строки, вы можете найти пробел или другие символы.
РЕДАКТИРОВАТЬ В качестве примера возьмите следующий код в Python2. Оператор ИЛИ '|' и я использовал его в квадратных скобках, чтобы поймать строки, которые в качестве последующего символа имеют пробел '\r' a . или "д".
import re
a = ') as whatever '
b = ') as whatever\r\n'
c = ') as whatever.'
d = ') as whateverd'
a_res = re.findall(r'\)\sas\s(.*?)[\s | \r | \n]', a)[0] #ending with space, \r or new line char
b_res = re.findall(r'\)\sas\s(.*?)[\s | \r | \n]', b)[0]
c_res = re.findall(r'\)\sas\s(.*?)[\s | \r | \on | \.]', c)[0] #ending with space, \r new line char or .
d_res = re.findall(r'\)\sas\s(.*?)[\s | \r | \on | \. | d]', d)[0] #ending with space, \r, new line char, . or d
print(a_res, len(a_res))
print(b_res, len(b_res))
print(c_res, len(c_res))
print(d_res, len(d_res))
Это работает, как вы и планировали. Пожалуйста, проверь это
import re
a =') as whatever '
b=') as whatever\r\n'
print re.findall(r'\)\sas\s(.*?)\s', a)[0]
print re.findall(r'\)\sas\s(.*?)\s', b)[0]
Это будет выводить как
'whatever'
'whatever'