2014-02-12 5 views
-1

Я пытаюсь написать регулярное выражение, которое извлекает строку со следующими свойствами:регулярное выражение для извлечения длинной подстроки

  1. Первая буква каждого слова является прописной буквы
  2. & знаки допускается в качестве автономных слова
  3. периоды допустимы в словах
  4. длинной подстроки в строке с этими свойствами

Я попробовал следующее регулярное выражение, но он не работает для меня

r'[A-Z](\w|\.)*(\s(([A-Z](\w|\.)*)|&))* 
+0

'не работает' означает соответствие вещей, которые он не должен, а не соответствующие им вещи, или другие технические трудности? – Ghost

+0

У вас есть какая-то текущая или желаемая пара входов/выходов? – heltonbiker

+0

не соответствует вещам, которые он должен – user1802143

ответ

2

Regex, чтобы соответствовать модели. Вы можете использовать динамическое программирование для решения этой самой длинной проблемы с подстрокой.

string = raw_input() 
longest_substring = [0] 

for i in range(len(string)): 
    pre_longest = longest_substring[-1] 
    if pre_longest == 0: 
     if string[i].isupper() or string[i] == '&': 
      cur_longest = 1 
     else: 
      cur_longest = 0 
    else: 
     if i > 0 and string[i-1] == '&': 
      cur_longest = 0 
     elif string[i].isalpha() or string[i] == '.': 
      cur_longest = pre_longest + 1 
     else: 
      cur_longest = 0 
    longest_substring.append(cur_longest) 

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