2015-12-02 24 views
0

的第二組的所有我有點憋屈的正則表達式(Python的初學者),我這裏有一個字符串「12x4x67」,我需要了分裂數爲變量,例如:長度,寬度和高度。我已經成功地獲得了第一組。現在我需要匹配第二組。這裏是我用我做的例子使用的正則表達式測試器的鏈接。蟒蛇正則表達式「12x4x67」比賽只有數

這是我regex

\d+ 

只匹配340x9x20340

+0

見[此演示](https://regex101.com/r/hJ1lU8/4)。有1個差:)然而,我想['(ΔP \ d +)×(2 P \ d +)×(2 P \ d +)'](https://regex101.com/r/mN3rS3/1 )會更好,您將可以通過指定組訪問任何部件。 –

+0

可以使用['\ d + \ d +(\ d +)'](https://regex101.com/r/hJ1lU8/7)和使用捕獲的組#1 – anubhava

+0

真棒!我之前也有同樣的事情,但我只想要第二場比賽,你知道我怎麼能做到這一點?或者像每個比賽一樣的foreach循環做到這一點? – IceTimux

回答

1

如果輸入總是有全部三個部分 - 長度,寬度和高度 - 您可以使用

(?P<l>\d+)x(?P<w>\d+)x(?P<h>\d+) 

regex demo

使用命名捕獲,你就可以通過訪問任何部件一個命名組。

例子:

import re 
p = re.compile(r'(?P<l>\d+)x(?P<w>\d+)x(?P<h>\d+)') 
test_str = "340x9x20" 
m = p.search(test_str) 
if (m): 
    print m.group("w") # => prints "9" (width) 
+0

這真是太棒了,我現在怎麼把l的匹配變成可變長度? – IceTimux

+0

你能澄清一下嗎? 'l'的值可以用'm.group(「l」)'獲得。然後,你可以用它做任何事情。 –

+1

非常感謝您的時間和耐心!它的工作原理,團隊的概念對我來說有點混亂,但我現在完全理解它們! – IceTimux

2

無需正則表達式:

length, width, height = "12x4x67".split('x') 

或者如果你喜歡處理整數:

length, width, height = [int(s) for s in "12x4x67".split('x')] 
+0

哇這也是一個不錯的解決方案,沒有正則表達式所需的這一個,謝謝 – IceTimux

1

我寧願分裂的做法,而是要回答你的關於正則表達式的問題 - 這將使用\d+找到所有發生:

lwh = "340x9x20" 
numbers = [int(n) for n in re.findall("\d+", lwh)] 
print(numbers)  # [340,9,20] 

這可以通過使用預編譯的正則表達式進行優化。