如何编写正则表达式提取指定模式的继承类声明字符串?
解决正则提取inherits片段的问题
我懂你要抓的是字符串里从inherits开始,到后面像implements/extend这类关键词之前的整段内容,不管类名之间的逗号带不带空格对吧?给你一个精准的正则方案:
正则表达式
inherits\s+.+?(?=\s+(?:implements|extend|union|intersection)\b)
逐个部分拆解说明
inherits\s+:精准匹配inherits单词,后面跟着至少一个空格,避免误匹配类似inheritsX的错误内容.+?:用非贪婪模式匹配任意字符,这样会刚好停在后续关键词的前面,不会过度匹配多余内容(?=\s+(?:implements|extend|union|intersection)\b):这是正向预查,用来定位片段的结束位置——匹配后面跟着空格+指定关键词的位置,(?:...)是不捕获的分组,\b是单词边界,防止匹配到关键词的变种(比如implements123)
实际测试示例
用Python演示实际效果,完全覆盖你给出的两种输入场景:
import re # 定义正则模式 pattern = r'inherits\s+.+?(?=\s+(?:implements|extend|union|intersection)\b)' # 测试不同输入 test_case1 = 'type MyClass inherits SomeClass,SomeOtherClass implements Node' test_case2 = 'type MyClass inherits SomeClass, SomeOtherClass implements Node' test_case3 = 'type MyClass inherits Foo,Bar,Baz union SomeType' # 提取结果 print(re.findall(pattern, test_case1)) # 输出: ['inherits SomeClass,SomeOtherClass'] print(re.findall(pattern, test_case2)) # 输出: ['inherits SomeClass, SomeOtherClass'] print(re.findall(pattern, test_case3)) # 输出: ['inherits Foo,Bar,Baz']
扩展说明
如果之后还有其他同类关键词(比如mixins),只需要在正则的分组里补充即可,比如:
inherits\s+.+?(?=\s+(?:implements|extend|union|intersection|mixins)\b)
这样就能灵活应对各种同类关键词啦!
内容的提问来源于stack exchange,提问作者Pankaj Parkar
相关产品推荐
相关产品推荐

