如何使用Regex在字符之间插入空格?

Ala*_*yne 5 c# regex

尝试学习使用Regex(正则表达式)的更多信息.在C#(VS 2010)中使用微软的Regex版本,我怎么能得到一个简单的字符串:

"Hello"
Run Code Online (Sandbox Code Playgroud)

并将其更改为

"H e l l o"
Run Code Online (Sandbox Code Playgroud)

这可以是任何字母或符号,大写字母,小写字母等的字符串,并且没有其他字母或符号跟随或引导该单词.(该字符串仅包含一个单词).

(我已经阅读了其他帖子,但我似乎无法掌握正则表达式.请善待:)).

感谢您的帮助.(解释最有用).

Avi*_*Raj 7

你可以通过正则表达式来完成这个,不需要内置的c#函数.使用以下正则表达式,然后用空格替换匹配的边界.

(?<=.)(?!$)
Run Code Online (Sandbox Code Playgroud)

DEMO

string result = Regex.Replace(yourString, @"(?<=.)(?!$)", " ");
Run Code Online (Sandbox Code Playgroud)

说明:

  • (?<=.) 积极的lookbehind断言匹配必须以字符开头.
  • (?!$)否定前瞻声明匹配将不会跟随行锚的结尾.因此,所有字符旁边的边界将匹配,但不匹配最后一个字符旁边的边界.

要么

您也可以使用单词边界.

(?<!^)(\B|b)(?!$)
Run Code Online (Sandbox Code Playgroud)

DEMO

string result = Regex.Replace(yourString, @"(?<!^)(\B|b)(?!$)", " ");
Run Code Online (Sandbox Code Playgroud)

说明:

  • (?<!^) 负面观察,断言比赛不会在开始.
  • (\B|\b)匹配两个单词字符和两个非单词字符\B之间存在的边界()或匹配单词字符和非单词字符(\b)之间存在的边界.
  • (?!$) 否定前瞻声明匹配将不会跟随行锚点的结尾.


dot*_*NET 6

Regex.Replace("Hello", "(.)", "$1 ").TrimEnd();
Run Code Online (Sandbox Code Playgroud)

说明

  • 点字符类匹配字符串"Hello"的每个字符.
  • 点字符周围的paranthesis是必需的,以便我们可以通过$n符号引用捕获的字符.
  • 每个捕获的字符都被替换字符串替换.我们的替换字符串是"$ 1"(注意结尾处的空格).这里$1表示输入中第一个捕获的组,因此我们的替换字符串将用该字符加一个空格替换每个字符.
  • 这个技术也会在最后一个字符"o"之后添加一个空格,所以我们调用TrimEnd()来删除它.

这里可以看到一个演示.

对于爱好者来说,使用这个单线程可以通过LINQ实现同样的效果:

String.Join(" ", YourString.Select(c => c))
Run Code Online (Sandbox Code Playgroud)