2013-05-13 2 views
0

Рассмотрим следующие строки, за исключением:Текст после подчеркиванием конкретного слова

server 
server_secure 
server_APAC_secure 
server_APAC 
server_US 
server_US_secure 
server_EU_secure 
server_ISRAEL 

Шаблон прост:

  1. Строка server
  2. Необязательная строка область (например, US, APAC) с префиксом подчеркивания. Строкой области может быть любая последовательность английских букв, за исключением слова secure.
  3. Дополнительный secure префикса с подчеркиванием

Я хотел бы получить список регионов, которые появляются в наборе строк. Это довольно просто сделать, используя строковые манипуляции, но я вполне уверен, что это может быть достигнуто с помощью регулярного выражения.

Как извлечь дополнительную подстроку области из каждой строки?

+2

почему вы do't хотите использовать 'расщеплять)' метод (? –

+0

Я хотел бы улучшить свои навыки регулярного выражения. Кроме того, я думаю, что это было бы более элегантно. –

+0

Хотя это возможно, я сомневаюсь, что его более элегантно использовать регулярное выражение здесь :-) Вы могли бы просто «split()' on »_», а затем иметь прямолинейную реализацию описанного вами алгоритма без использования регулярного выражения. –

ответ

2

Просто подберите что-нибудь, что либо следуют границе слова, или по _secure:

region = re.compile(r'server_([A-Z]+)(?_secure|\b)') 

В частности, это соответствует только символы верхнего регистра, вы можете расширить класс символов ([...]) по мере необходимости, чтобы соответствовать более, как необходимо.

Демо:

>>> import re 
>>> region = re.compile(r'server_([A-Z]+)(?:_secure|\b)') 
>>> example = '''\ 
... server 
... server_secure 
... server_APAC_secure 
... server_APAC 
... server_US 
... server_US_secure 
... server_EU_secure 
... server_ISRAEL 
... '''.splitlines() 
>>> for ex in example: 
...  match = region.search(ex) 
...  if match is not None: 
...   print match.group(1) 
... 
APAC 
APAC 
US 
US 
EU 
ISRAEL 
+1

При использовании' [A-Za-z] 'оно также соответствует' secure'. –

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