.NET正则表达式:如何在&和-前自动添加缺失的前置空格
VB.NET 字符串空格处理解决方案
1. 在&和-前添加缺失的前置空格(fPhraseSpacesLeadingAdd)
原代码的问题在于正则未设置有效捕获组,且会错误匹配已带空格的场景。正确思路是仅匹配**非空格字符紧跟&/-**的情况,通过捕获组保留前置字符后补空格。
修正后的代码:
Private Function fPhraseSpacesLeadingAdd() As String Dim strClsPhrase As String = "Cobb& Co is nice. Also so is M& Sheer and B- Cafe." ' 预期输出: "Cobb & Co is nice. Also so is M & Sheer and B - Cafe." Dim strReturn As String = strClsPhrase ' 正则捕获非空格字符+目标符号的组合 Dim regex As New Regex("([^\s])([&-])") ' 替换为「前置字符 + 空格 + 目标符号」 strReturn = regex.Replace(strReturn, "$1 $2") Return strReturn End Function
说明:[^\s]匹配任意非空格字符并捕获为$1,[&-]匹配目标符号并捕获为$2,替换时自动跳过已带空格的场景,避免重复添加。
2. 在: ; , &后添加缺失的后置空格(fSpaceTrailingAdd)
核心是仅给无后置空格的目标符号补空格,通过负向预查排除已带空格的情况。
实现代码:
Private Function fSpaceTrailingAdd(input As String) As String ' 匹配目标符号后面无空格的场景 Dim regex As New Regex("([:;,&])(?!\s)") ' 替换为「目标符号 + 空格」 Return regex.Replace(input, "$1 ") End Function
说明:(?!\s)是负向预查,确保符号后面没有空格,只会对缺失空格的场景进行补充。
3. 移除$ “ ‘ ( [ {后的所有空格(fSpaceTrailingRemove)
需要匹配目标符号后的一个或多个空格,替换时仅保留符号本身。
实现代码:
Private Function fSpaceTrailingRemove(input As String) As String ' 匹配目标符号后面的连续空格 Dim regex As New Regex("([$""‘(\[{])\s+") ' 替换为仅保留目标符号 Return regex.Replace(input, "$1") End Function
说明:\s+匹配一个或多个连续空格,捕获组保留目标符号,替换时直接去掉后续空格。
内容的提问来源于stack exchange,提问作者user1946932
相关产品推荐
相关产品推荐

