2016-03-03 30 views
2

有輸入例如多個空格分隔字符:string = "a b c d a s e "如何在Python中的正則表達式中使用括號*或+?

應該採取什麼模式是這樣的,當我使用模式輸入做re.search,我能得到j「個字符與下面的空間一起它在輸入中使用.group(j)

我試過類似的東西"^(([a-zA-Z])\s)+"但這不起作用。我該怎麼辦?

編輯 我實際的問題是,在描述只是它的一個特殊情況的標題和正文: 這裏的問題的一般版本:如果我必須採取特定類型的所有模式(最初的問題來自一個字符串的模式「[a-zA-Z] \ s」),我該怎麼辦?

回答

6

使用findall()代替,並得到由指數j個比賽:

>>> j = 2 
>>> re.findall(r"[a-zA-Z]\s", string)[j] 
'c ' 

其中[a-zA-Z]\s將匹配較低或大寫字母后跟一個空格字符。

+0

uhm,'r'在.findall(r「[a-zA-Z] \ s」,..)中的含義是什麼? –

+0

@LucyferZedd這只是意味着字符串是「原始」(http://stackoverflow.com/questions/2241600/python-regex-r-prefix)。 – alecxe

5

爲什麼用regex的時候可以簡單地使用str.split()方法並通過簡單的索引訪問字符?

>>> new = s.split() 
>>> new 
['a', 'b', 'c', 'd', 'a', 's', 'e'] 
+0

我編輯我的問題,因爲它是在一個混亂的方式措辭。 –

1

你可以這樣做:

>>> string = "a b c d a s e " 
>>> j=2 
>>> re.search(r'([a-zA-Z]\s){%i}' % j, string).group(1) 
'b ' 

說明:

  1. 與模式([a-zA-Z]\s)您捕獲了一封信,則空間;
  2. 隨着重複{2}添加,您捕獲最後的重複 - 在這種情況下,第二個(基礎1與基礎0索引...)。

Demo

相關問題