Исходя из вашего описания и ваших примеров данных, вы можете использовать следующее регулярное выражение для сопоставления предполагаемых строк и отбрасывания других,
^\d[^\d.]*\d?[^\d.\n]*(?=\.|$)
Regex Объяснение:
^
- начало строки
\d
- соответствует цифре
[^\d.]*
- соответствует любому символу, кроме цифры или ноля или более раз. Это в основном позволяет опционально сопоставлять нецифровые не точечные символы.
\d?
- Если вы хотите разрешить одну или две цифры, это вторая цифра, которая является необязательной, поэтому \d
, за которой следует ?
[^\d.\n]*
- соответствует любому символу, кроме цифры, точки или новой строки
(?=\.|$)
- Этот позитивный взгляд вперед гарантирует, что совпадение заканчивается либо точкой, либо концом линии
Также обратите внимание, что многострочный режим включен, так как ^
и $
должны соответствовать началу строки и концу строки .ad
Regex Demo 1
Код:
import re
s = '''5+years {} experience. stop.
10 asdasdas . 255
1abc1
5555afasfasf++++s()(2jn.'''
print(re.findall(r'(?m)^\d[^\d.]*\d?[^\d.\n]*(?=\.|$)', s))
Печать:
['5+years {} experience', '10 asdasdas ', '1abc1']
Кроме того, если совпадающие строки не обязательно начинаются с цифр, вы можете использовать это регулярное выражение для захвата вашей предполагаемой строки, но здесь вам нужно получить вашу строку из group1, если вы хотите, чтобы захваченная строка начиналась только с цифры, и, если она предназначена Строка не обязательно должна начинаться с цифры, тогда вы можете захватить все совпадение.
^[^\d\n]*(\d[^\d.]*\d?[^\d.\n]*)(?=\.|$)
Regex Объяснение:
^
- начало строки
[^\d\n]*
- допускает ноль или более нецифровых символов перед первой цифрой
(
- запускает первый шаблон группировки для захвата строки, начиная с первой цифры
\d
- соответствует цифре
[^\d.]*
- соответствует любому символу, кроме цифры или ноля или более раз. Это в основном позволяет опционально сопоставлять нецифровые не точечные символы.
\d?
- Если вы хотите разрешить одну или две цифры, это вторая цифра, которая является необязательной, поэтому \d
, за которой следует ?
[^\d.\n]*
- соответствует любому символу, кроме цифры, точки или новой строки
- `) - Конец первого шаблона захвата
(?=\.|$)
- Этот положительный взгляд вперед гарантирует, что совпадение заканчивается либо точкой, либо концом линии
Включен многострочный режим, который можно включить, поместив (?m)
перед началом регулярного выражения, также называемого встроенным модификатором, или передав третий аргумент re.search
как re.MULTILINE
Regex Demo 2
Код:
import re
s = '''5+years {} experience. stop.
10 asdasdas . 255
1abc1
aaa1abc1
aa2aa1abc1
5555afasfasf++++s()(2jn.'''
print(re.findall(r'(?m)^[^\d\n]*(\d[^\d.]*\d?[^\d.\n]*)(?=\.|$)', s))
Печать:
['5+years {} experience', '10 asdasdas ', '1abc1', '1abc1']