2013-12-18 79 views
1

可能的字符串是:Python的正則表達式捕捉模式後,第一個字

  1. public class MyClass extends ParentClass {

  1. public class MyClass throws SomeException {

或只是

  1. public class MyClass {

我使用下面的模式來隨時捕捉MyClass

ptrn = "((public|private|protected)\s+(.*)\s*[class|interface]\s+(\w+))" 

但是當我做

regex = re.search(ptrn, text) 

className = regex.group(4) 

爲1和2,我得到ParentClassSomeException分別只有3我得到MyClass

我的正則表達式模式有什麼問題,我該如何解決?

回答

1

這工作:

strings = ("public class MyClass extends ParentClass {","public class MyClass throws SomeException {","public class MyClass {") 
pattern = "((public|private|protected)\s+(class|interface)\s+(\w+))" 

for string in strings: 
    print re.search(pattern,string).group(4) 
2

[class|interface]是一個字符類;基本上它會匹配任何一個這些字符。相反,你可能想使用(class|interface)

http://rubular.com/r/Jc6o3SAhi3

3

我不知道Python,但我不知道正則表達式相當好。你在找什麼更像是: (public|private|protected)\s+(class|interface)\s+(\w+)

我不知道哪個組將在Python中,但它大多數其他語言,它會是組3(0將是整個字符串,1將公共,私人或受保護的,2個是類或接口,3將是你的類名)