Python 用于解析纯英语定义的正则表达式,并附有示例

Python 用于解析纯英语定义的正则表达式,并附有示例,python,regex,Python,Regex,我正试图为一个单词的定义编写一个小的解析器,并提供一个简单英语的用法示例 例如 示例1-“Foo:bar的同伴,例如,我有一个名为FooBar的类” 示例2-“Foo:bar的同伴例如,我有一个名为FooBar的类” 我希望将上述两个示例分解为: [('Foo','bar的同伴','我有一个叫做FooBar'的类] 这是我目前掌握的代码 import re EXAMPLE_REGEX = re.compile("(.*):(.*)(e.?g.?|(for )?example)(.*)") p

我正试图为一个单词的定义编写一个小的解析器,并提供一个简单英语的用法示例

例如

  • 示例1-“Foo:bar的同伴,例如,我有一个名为FooBar的类”
  • 示例2-“Foo:bar的同伴例如,我有一个名为FooBar的类”
我希望将上述两个示例分解为:

[('Foo','bar的同伴','我有一个叫做FooBar'的类]

这是我目前掌握的代码

import re
EXAMPLE_REGEX = re.compile("(.*):(.*)(e.?g.?|(for )?example)(.*)")
print EXAMPLE_REGEX.findall('Foo: The companion of bar e.g. I have class called FooBar')
输出:
[('Foo','bar的同伴','e.g','I have class call FooBar')]


如何避免输出中额外的
,例如
'

有一个更优雅的解决方案,但您可以将可选元素转换为非捕获组(
?:
):


键是
(?:例如?|(?:for)

使用
(?:)
忽略捕获组:
(?:例如)
这很有效!谢谢。您认为更优雅的解决方案是什么样的?
import re
EXAMPLE_REGEX = re.compile("(.*):(.*)(?:e.?g.?|(?:for )?example)(.*)")
print EXAMPLE_REGEX.findall('Foo: The companion of bar e.g. I have class called FooBar')