使用示例以简明英语解析定义的正则表达式

时间:2013-04-30 21:39:42

标签: python regex

我正在尝试用简单的英语中的一个用例来编写一个小的解析器来定义一个单词。

例如

  • 示例1 - “Foo:酒吧的伴侣,例如我有一个名为FooBar的课程”
  • 示例2 - “Foo:bar的伴侣,例如我有一个名为FooBar的类”

我希望将上述两个示例分解为:

[('Foo', 'The companion of bar', 'I have class called 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', ' The companion of bar ', 'e.g.', '', ' I have class called FooBar')]

如何避免输出中的额外'e.g.'''

1 个答案:

答案 0 :(得分:1)

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

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')

密钥为(?:e.?g.?|(?:for )