2

我正在尝试编写一个小型解析器来定义一个单词,并提供一个简单的英语用法示例。

例如

  • 示例 1 -“Foo:bar 的伴侣,例如我有一个名为 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.'''输出?

4

1 回答 1

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 )

于 2013-04-30T21:45:53.790 回答