我正在处理一些自由文本,因为我需要做一些数据清理,我有一个问题(很多,我稍后会问,我肯定):
我需要更换以下组合:
[ ; ]
(标点符号前后的空格)
[;]
(标点符号前后没有空格)
[ ;]
(标点符号前只有空格)
到
[; ]
(标点符号后面只有空格)
...标点符号可以是[;:,.]
之一。我怎么能用正则表达式做到这一点?
答案 0 :(得分:6)
可能的表达方式是:
\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
不太熟悉。)
答案 1 :(得分:2)
我会使用\s*([;:,.])\s*
并替换为'$1 '
(添加单引号以强调反向引用后的空格。这是Felix的第一个和最后一个建议之间的交叉,因此它可以清理多个空格,包括标签和换行符。
答案 2 :(得分:0)
这取决于您在如何将其移动到已清理的表单[; ]
中使用的语言,但您可以通过将它们括在{{{}}中来匹配任何标点符号。 1}},与[]
一样。
完成模式后,可以用干净的版本替换匹配项。至少在Java中,您可以使用[;:,.]
之类的内容替换它,"\[$<GroupNumber> \]"
引用带括号标记的带括号的组,如1,2,3等,基于顺序小组。
请记住,根据您使用的语言,您可能需要转义反斜杠。如果您使用的是Java,那么对于上面的所有示例,您需要使用<GroupNumber>
代替\\
。