【发布时间】:2011-10-19 15:55:12
【问题描述】:
我必须编写正则表达式来匹配一些可标记的文本,并且添加所有\s* 和\s+ 会很麻烦,因为空格的数量并不重要或根本不需要。
我想要的是一个接受正则表达式和分隔符列表的函数,然后为我添加空格匹配。
例如:
make_whitespace(regex="foo\.(\w+)\(a\)",delimiters="()[]{},.+-")
应该返回
"foo\s*\.\s*(\s*\w+\s*)\(\s*a\s*\)"
也许已经有更好的方法来实现这一点,而不是破解现有的正则表达式;但我认为使用完整的解析器生成器将是矫枉过正。我正在使用 Python。
谢谢。
【问题讨论】:
-
所以除了标记文本的问题之外,您还添加了标记正则表达式的问题。
-
@StevenRumbalski he he, true ;-)
-
"\s*".join(["foo","\.","(","\w+",")\(","a","\)"])这样的东西怎么样?不过,我想这实际上并没有节省任何打字...... -
虽然这个想法在理论上听起来不错,但实际上很难做到 - 特别是当您考虑捕获组时 - 在您的示例中,您在捕获组的外部和内部添加空格(其中
\.(转换为\.\s*(\s*- 我相信正则表达式引擎不会捕获任何空格,但会在捕获之前允许它......你想要它做什么? -
@CodeJockey 是的,他们是贪婪的运算符(除非附加问号),所以第一个会得到所有的空格
标签: python regex whitespace transformation tokenize