Python RegEx捕获模式后的第一个单词

时间:2013-12-18 18:56:57

标签: python regex

可能的字符串是:

  1. public class MyClass extends ParentClass {
    1. public class MyClass throws SomeException {
    2. 或只是

      1. public class MyClass {
      2. 我使用以下模式始终捕获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

        我的正则表达式模式有什么问题,如何解决?

3 个答案:

答案 0 :(得分:3)

我不懂Python,但我确实知道正则表达式。您正在寻找的更像是: (public|private|protected)\s+(class|interface)\s+(\w+)

我不知道在Python中会使用哪个组,但是大多数其他语言,它都是第3组(0表示整个字符串,1表示公共,私有或受保护,2表示类或interface,3将是你的班级名称。)

答案 1 :(得分:2)

[class|interface]是一个角色类;基本上它将匹配这些字符中的任何一个。相反,您可能想要使用(class|interface)

http://rubular.com/r/Jc6o3SAhi3

答案 2 :(得分: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)