可能的字符串是:
public class MyClass extends ParentClass {
或
public class MyClass throws SomeException {
或只是
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我分别得到ParentClass
和SomeException
,只有3得到MyClass
。
我的正则表达式模式有什么问题,如何解决?
答案 0 :(得分:3)
我不懂Python,但我确实知道正则表达式。您正在寻找的更像是:
(public|private|protected)\s+(class|interface)\s+(\w+)
我不知道在Python中会使用哪个组,但是大多数其他语言,它都是第3组(0表示整个字符串,1表示公共,私有或受保护,2表示类或interface,3将是你的班级名称。)
答案 1 :(得分:2)
[class|interface]
是一个角色类;基本上它将匹配这些字符中的任何一个。相反,您可能想要使用(class|interface)
答案 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)