2015-05-19 3 views
1

У меня есть строка:Regex найти все матчи из строки

TEXT OF SWITZERLAND CASABLANCA, 2041 Cash 1234e

Я хочу, чтобы извлечь все буквенно-цифровые значения (цифры обязательного) с длиной по меньшей мере 4, с или без включение специальных символов /\_:.\-|

Ниже приведено регулярное выражение.

(?=.{4,}$)(?=.*[0-9])([a-zA-Z0-9/\\_:.\-|]+)$

Но это только захватывает нужный шаблон, если он является последним в строке. Я хочу захватить все значения. В этом случае 2041 и 1234e.

Я пробовал решения от answers и еще несколько, но никто не работал.

ответ

2
\b(?=[a-zA-Z]*\d)[a-zA-Z0-9/\\_:.\-|]{4,}\b 

Попробуйте это. $ вызывает только последнее совпадение. \b ознаменует границу слова, и вы получите все matches.See демо

https://www.regex101.com/r/fJ6cR4/15#python

+0

Если две буквенно-цифровые строки присутствуют он выбирает только первый один. пример строки, 'Philippe Columbus 57s2 COLVMBVS CCSTRH8 Нержавеющая сталь' – Vaulstein

+0

@Vaulstein он выбирает оба. См. Здесь https://www.regex101.com/r/fJ6cR4/16 use' re.findall' – vks

+0

Не работает для ' ABSTRD.910.824' :( – Vaulstein

1

Добавление ответа VKS, в регулярное выражение не может соответствовать строке ABSTRD.910.824

Я попробовал это, и она работала отлично.

Regex: \b(?=[a-zA-Z/\\_:\-.|]*\d)[a-zA-Z0-9/\\_:\-.|]{4,}\b

+0

Вы также можете попробовать новый – vks

Смежные вопросы