2017-08-09 24 views
1

我有一個字符串,它看起來像這樣之間:Python的 - 正則表達式的內容重複串

Q 1. What is your age? 

Ans. 15. 

Q 2. What is your name? 

Ans. My name is Bond. 


My full name is James Bond 

Q 3. What is your favorite subject? 

等等......這些問題的答案可以有多個段落。文本通常看起來像等等..我想寫一個正則表達式給我這些對。 我想分開問題答案對。我有一個正則表達式來輸出問題,但無法弄清楚如何獲得這些對。請指導。對於問題的正則表達式是:

p = re.findall("""Q [0-9]+[a-zA-Z]*\.(.*?)Ans\.""", checkText, re.S) 
+1

你需要用正則表達式來做到這一點?使用stringIO並遍歷行會不會更容易? – jprockbelly

+0

@jprockbelly - 亞,這個文本是在一個HTML頁面,並且在這些問題之間還有其他字符串。將相應地更新問題。謝謝 – Tarun

+0

如何解析HTML?使用lxml或BeautifulSoup – jprockbelly

回答

2

如果您希望繼續使用正則表達式,這裏的一些解決方案:

  1. 問題只是:Q \d\..*?\?(?=.*(?:Ans\.)?)(發現問題沒有答案也一樣)只
  2. 答:Ans\. .*?(?=\n\nQ \d\.)
  3. 問答(一對):Q \d\. .*?(?=\n\nQ \d\.)

    Q "matches Q 
    (space) 
    \d "matches a digit 
    \. "matches a dot 
    (space) 
    .*? "matches everything (also new lines, you must use Single Line option), lazy matching 
    (?= "positive lookahead 
        \n\n "matches two new lines 
        Q \d\. "beginning of next question, same as before 
    ) "end of lookahead 
    

更多關於懶惰(非貪婪)匹配here

演示here(提高到最後一個問題,以及匹配)

+0

嘿伊根,這很有幫助,請你解釋第三點。這將有助於我根據字符串中的角落案例進行更改!謝謝 – Tarun

+1

@Tarun我加了一些解釋。您可以使用regex101.com等網站來了解regex如何工作。 –

+0

謝謝你的幫忙。 :) – Tarun