Я пытаюсь испачкать регулярное выражение.
Пример строки
Info:Somestring-103409115825.Call
Info: BIL*ONL*00003.Avbl
В настоящее время это соответствует
>>> print(re.search(r'Info:(.*?).Call', payload).group(1))
Somestring-103409115825
>>> print(re.search(r'Info:(.*?).Avbl', payload).group(1))
BIL*ONL*00003
Как сделать регулярное выражение таким, чтобы оно соответствовало обоим предположениям, например Info -- AnyString -- .Call|.Avbl
?
2 ответа
Вы можете избежать точки и поместить ее перед использованием чередования для соответствия либо Call, либо Avbl
\bInfo:(.*?)\.(?:Call|Avbl)\b
import re
pattern = r"\bInfo:(.*?)\.(?:Call|Avbl)\b"
print(re.search(pattern, "Info:Somestring-103409115825.Call").group(1))
print(re.search(pattern, "Info: BIL*ONL*00003.Avbl").group(1))
Вывод
Somestring-103409115825
BIL*ONL*00003
Если вам не нужен ведущий пробел перед значением группы, вы можете использовать:
\bInfo:\s*(.*?)\.(?:Call|Avbl)\b
Посмотреть демонстрацию Python
Пожалуйста, попробуйте этот код.
import re
payload1 = 'Info:Somestring-103409115825.Call'
payload2 = 'Info: BIL*ONL*00003.Avbl'
print(re.search(r'Info:(.*?)((.Call)|(.Avbl))', payload1).group(1))
print(re.search(r'Info:(.*?)((.Call)|(.Avbl))', payload2).group(1))
Похожие вопросы
Новые вопросы
python
Python - это многопарадигмальный, динамически типизированный, многоцелевой язык программирования. Он разработан для быстрого изучения, понимания и использования, а также для обеспечения чистого и единообразного синтаксиса. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Тем не менее, для вопросов о Python, связанных с версией, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas и NumPy) включите его в теги.