我正在写一些免费的文本,我需要做一些数据清理,我有一个问题(在许多问题中,我相信稍后我会问):
我需要替换以下组合:
[ ; ] (标点符号前后的空格)
[;] (标点符号前后没有空格)
[ ;] (仅限标点符号前的空格)
至
[; ] (仅在标点符号后有空格)
...where标点符号可以是[;:,.]中的一个。如何使用正则表达式完成此操作?
发布于 2011-01-21 11:52:50
一种可能的表达式是:
\s?([;:,.])\s?根据您使用的编程语言或工具,您必须使用$1、\\1或\1作为反向引用,替代方法可能是$1 (在1之后有一个空格)。
说明:
\s? - match at most one whitespace character
(...) - capture group, storing the matched characters in a reference
[...] - character class, matching one of the characters inside参考: character class、capture group、quantifier
但同样:表达式可能会有所不同,这取决于您使用的工具/语言。例如,sed的类似表达式将如下所示:
/ *\([;:,.]\) */\1 /但这也会减少标点符号周围的空格(可能还有更好的方法,但我对sed不是很熟悉)。
发布于 2011-01-21 15:49:44
我会使用\s*([;:,.])\s*并替换为'$1 ' (添加单引号以强调反向引用后的空格。这是Felix的第一个和最后一个建议的交叉,所以它可以清理多个空格,包括制表符和换行符。
发布于 2011-01-21 11:57:37
这取决于您使用哪种语言将其移动到清理后的表单[; ]中,但是您可以通过将标点符号括在[]中来匹配它们,比如[;:,.]。
一旦你完成了你的模式,你就可以用你的干净版本替换匹配的内容。至少在Java语言中,您可以将其替换为类似"\[$<GroupNumber> \]"的内容,<GroupNumber>根据组的顺序,使用您的标点符号引用带括号的组,如1、2、3等。
请记住,根据您使用的语言,您可能需要转义反斜杠。如果您使用的是Java,那么对于上面的所有示例,您需要使用\\来代替\。
https://stackoverflow.com/questions/4755186
复制相似问题