2010-06-02 62 views
1

我很接近,但我不知道如何處理restuling匹配對象。如果我做查找並返回一個帶有指定前綴的字符串

p = re.search('[/@.* /]', str) 

我會得到任何以@開頭的單詞,並以空格結束。這就是我要的。然而,這會返回一個Match對象,我不知道該怎麼處理。查找和返回以@爲前綴的字符串的計算最有效的方法是什麼?

例如,

"Hi there @guy" 

做正確的計算後,我將返回

guy 

回答

3

下面的正則表達式你所需要的:

import re 
s = "Hi there @guy" 
p = re.search(r'@(\w+)', s) 
print p.group(1) 

它還將用於以下字符串格式的工作:

  • s = "Hi there @guy "#注意到尾隨空間
  • s = "Hi there @guy,"#注意到尾隨逗號
  • s = "Hi there @guy and"#注意下一個字
  • s = "Hi there @guy22"#注意到尾隨數字
  • s = "Hi there @22guy"#通知領先的數字,如果它是由一個@(之前
+0

取決於是否讓我們見面@ 11 pm應該得到匹配 – 2010-06-02 10:19:54

+0

如果數字是重要的(以及單詞)該正則表達式將如何修改? – tipu 2010-06-02 17:57:56

+0

其實\ w模式匹配任何字母數字字符和下劃線,這相當於set [a-zA-Z0-9_],例如@ 11pm,例如會正確匹配。 – 2010-06-03 06:30:45

0

p.group(0)應該返回guy。如果你想知道對象有什麼功能,你可以使用dir(p)方法找出。這將返回可用於該對象實例的屬性和方法的列表。

+0

似乎並不, '>>> STR = 「喬有@guy」 >>> P = re.search( '[/@.* /]',STR) >>> p .group(0) ''' (輸出爲'') – tipu 2010-06-02 09:33:01

+0

我會補充一點,您可以在http://docs.python.org/library/re.html#match找到匹配對象的文檔。 -objects – 2010-06-02 09:34:45

1

該正則表達式不會做你認爲它的作用。

s = "Hi there @guy" 
p = re.search(r'@([^ ]+)', s) # this is the regex you described 
print p.group(1) # first thing matched inside of (..) 

但作爲一般用正則表達式,有噸的違反此,例如,如果文本爲s = "Hi there @guy, what's with the comma?"結果將是guy,例子。

所以你真的需要考慮你想要的每一件可能的事情,並且不想匹配。 r'@([a-zA-Z]+)'可能是一個很好的起點,它實際上只匹配字母(a .. z,沒有unicode等)。

+0

您可以使用'\ b'。 – kennytm 2010-06-02 09:40:24

0
(?<[email protected])\w+ 

將匹配一個單詞不將其加入了比賽,所謂的積極的回顧後)。這將匹配由字母,數字和/或下劃線組成的「單詞」;如果你不想這些,使用(?<[email protected])[^\W\d_]+

在Python:

>>> strg = "Hi there @guy!" 
>>> p = re.search(r'(?<[email protected])\w+', strg) 
>>> p.group() 
'guy' 
0

由於這是從答案顯然到目前爲止正則表達式是你的問題的最有效的解決方案。答案略有不同關於你給多少所應遵循的@

[^ ] anything but space 
\w in python-2.x is equivalent to [A-Za-z0-9_], in py3k is locale dependent 

如果你有更好的想法可能會被包含在用戶名什麼字你會調整自己的正則表達式來反映,例如,只有小寫ASCII字母,將是:

[a-z] 

注:爲簡單起見,我跳過量詞。

0

你說:「」「如果我這樣做p = re.search('[/@.* /]', str)我會得到任何以@開始的單詞,並以空格結束。」「但這是不正確的 - 該模式是一個匹配一個字符的字符類。在設置@/.*和空間注意:有一個在模式的冗餘的第二/ 例如:

>>> re.findall('[/@.* /]', '[email protected] x/x.x*x xxxx') 
['@', ' ', '/', '.', '*', ' '] 
>>> 

你說你要"guy""Hi there @guy"返回,但以「和以空間結束了」衝突。

請編輯你的問題,包括你真正想要/需要匹配的東西。

相關問題