2015-08-28 27 views
0

我正在製作一個腳本來抓取網頁並查找所有大寫名稱,等於一個數字(例如DUP_NB_FUNC=8)。然而,我的正則表達式必須匹配的部分只有大寫字母似乎沒有正常工作。正則表達式不匹配大寫字母,儘管被指示這樣做

value = re.findall(r"[A-Z0-9_]*(?==\d).{2,}", input) 
|tc_apb_conf_00.v:-:DUP_NB_FUNC=2 

|:-:DUP_NB_FUNC=2 

|:-:DUP_NB_FUNC=4 

|:-:DUP_NB_FUNC=5 

|tc_apb_conf_01.v:-:DUP_NB_FUNC=8 

所需的輸出應該看起來像上面。但是,我得到:基於輸入我可以看到它找到匹配開始=1

|tc_apb_conf_00.v:-:=1" name="viewport"/> 

|:-:DUP_NB_FUNC=2 

|:-:DUP_NB_FUNC=4 

|:-:DUP_NB_FUNC=5 

|tc_apb_conf_01.v:-:DUP_NB_FUNC=8 

。我不明白爲什麼,因爲我只將A-Z置於正則表達式範圍內。我真的很感激一點幫助和清理。

+2

難道你讓零'[A-Z0-9 _]單曲? '[A-Z0-9 _] +'是否有所作爲? – Biffen

+1

Regex 101可以更清楚地解釋你的表情發生了什麼。 https://regex101.com/r/qE8iQ7/1 - 似乎是「。{2,}」與任何字母(除了換行符)無限次相匹配的問題。我想如果你在'= '之後放置任何東西,它也會匹配。或者將'*'改爲'+'以在'1和無限'次之間匹配。 – KymikoLoco

回答

1

這應該是幫助:

[A-Z0-9_]+(?==\d).{2,} 

\b[A-Z0-9_]*(?==\d).{2,}\b 

但無論如何,你的正則表達式相當怪異,根據您的要求上面,我建議這個

[A-Z0-9_]+=\d+ 

而不是使用

(?==\d).{2,}:任何字母兩個或兩個以上,並確保第一的兩個字母是=和分別是一個整數,

你可以使用

=\d+ 
+0

@Milen Markkov如果它仍然不正確,請添加更多的信息和數據,我們可以根據您的要求使用它來測試它。 – fronthem

+0

好的,對不起,以前不清除那個 - 使用{2.}的原因是因爲在字符串的下面有20個以上的參數綁定到一個.v模塊(不僅僅是一個參數,在我的例子中)和im試圖抓住整個系列,在我看來,如果我不使用{2.}它只是匹配第一個,並繼續 –

+0

@MilenMarkov你的正則表達式是結束,那麼如果結束在行結束你應該把$ '。 – fronthem

0

試試這個。 value = re.findall(r"[A-Z0-9_]+(?==\d).{2,}", input)

你要區分大小寫的匹配,以配合至少一次,這意味着你想要的+量詞,而不是*量詞,那和無限的時間之間的匹配。

0

我會建議您定義圖案,然後檢查你的輸入是否可用

因爲我在TLIST: 值= re.compile(R「[A-Z0-9 _: - ] + = \ d +「) JEE = value.match(I) 如果JEE不無: 打印我

TLIST包含你輸入

相關問題