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

时间:2014-12-23 04:51:57

标签: c# regex

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

"Hello"

并将其更改为

"H e l l o"

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

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

感谢您对此提供任何帮助。 (解释最有用)。

3 个答案:

答案 0 :(得分:5)

您只能通过正则表达式执行此操作,无需内置的c#函数。 使用下面的正则表达式,然后用空格替换匹配的边界。

(?<=.)(?!$)

DEMO

string result = Regex.Replace(yourString, @"(?<=.)(?!$)", " ");

<强>解释

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

您也可以使用字边界。

(?<!^)(\B|b)(?!$)

DEMO

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

<强>解释

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

答案 1 :(得分:5)

Regex.Replace("Hello", "(.)", "$1 ").TrimEnd();

<强>解释

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

A demo can be seen here

对于发烧友来说,使用这种单线程可以通过LINQ实现同样的效果:

String.Join(" ", YourString.Select(c => c))

答案 2 :(得分:1)

这很简单。要匹配任何字符,请使用.点,然后将该字符替换为一个额外的空格

此处括号(...)用于$index

可以访问的分组

找到:"(.)"

使用"$1 "

重新抓取

DEMO