2014-02-12 49 views
-1

我想寫提取具有以下屬性字符串中的正則表達式:正則表達式來提取最長的子串

  1. 每個單詞的第一個字母是大寫字母
  2. &跡象都可以作爲獨立詞語
  3. 週期被允許在話
  4. 具有這些特性的字符串中的最長子串

我試過以下的正則表達式,但它不是爲我

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

「不工作」是指匹配的東西不應該,不匹配的東西,或其他技術困難? – Ghost

+0

你有一些電流與期望的輸入/輸出對嗎? – heltonbiker

+0

應該不匹配的東西 – user1802143

回答

2

工作正則表達式是匹配模式。您可以使用動態編程來解決這個最長的子串問題。

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