使用一个正则表达式对齐空间和标点符号

时间:2018-10-16 11:30:25

标签: c# .net regex string

我有几个字符串,例如:

test
test. hi
test,  hello.(actual whitespace)
hello -this is a test
hello v2 , i am a " test" as well

我想按照一些规则来对齐标点符号:

  1. 逗号应有尾随空格,但不能有前导空格
  2. 如果原始字符串中连字符的任一侧至少有一个空格,则连字符应在两侧都带有空格
  3. 点在字符串末尾的情况下,点后应留有尾随空格
  4. 引号(单引号和双引号)在开/关侧不应有空格
  5. 等(其他规则会根据需要添加,对于这种情况,前4个就足够了)

所以输出将是:

test
test. hi
test, hello.
hello - this is a test
hello v2, i am a "test" as well

我的问题是:是否可以一次使用单个正则表达式而不是为每种情况创建一个正则表达式来做到这一点?如果可以,那么能做到这一点的正则表达式又是什么呢?有没有比单个正则表达式更有效的方法(如果可能的话),特别是考虑到我已经遍历整个字符串以删除一些特殊的unicode字符的事实了?

1 个答案:

答案 0 :(得分:1)

使用MatchEvaluator的{​​{1}} delegate版本,您可以使用Regex.Replace查找有问题的标点符号,然后使用条件逻辑返回正确的结果。这不能处理规则4-在正则表达式中识别开引号和闭引号并不容易。

Regex