我正在尝试用简单的英语中的一个用例来编写一个小的解析器来定义一个单词。
例如
我希望将上述两个示例分解为:
[('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.'
和''
?
答案 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 )