首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将一组单一字符和空白替换为相同的字符,但没有空白

如何将一组单一字符和空白替换为相同的字符,但没有空白
EN

Stack Overflow用户
提问于 2015-01-14 00:43:38
回答 3查看 85关注 0票数 1

我试图在C#中标准化一些作者名字的格式。棘手的是那些使用首字母的人。例如,流行的“哈利·波特”系列的作者可能就是其中之一:

  • JK罗琳
  • J.K.罗琳
  • J.K.罗琳
  • J K罗琳

我想标准化所有这些"JK罗琳“。

我也试图解决像JRR Tolkien这样的名字,这里有三个首字母,而不是两个。

在简单地替换了".“之后,我剩下了"J K罗琳”或"J R R Tolkien“。我想把这些翻译成"JK罗琳“和"JRR Tolkien”。

因此,逻辑是:捕获单个字符,后面是任意数量的空格,然后是(但不包括)另一个字符。从捕获中删除空白,并用已清除的字符串替换捕获。

以下是一些样本:

  • J R R Tolkien -> JRR Tolkien
  • E L James -> EL James
  • F Scott Fitzgerald ->无变化

我已经到了能够捕捉到我所需要的角色的地步:

代码语言:javascript
复制
(\b[a-zA-Z]\b\s*)*

https://www.debuggex.com/r/OLnu3YvvjIumGbQ1

但我不知道从哪里出发,以便用一个没有任何空白的版本来代替捕获。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-01-14 00:53:38

试着取代

代码语言:javascript
复制
\b(\w)\.?\s*(?!\w\w)

$1

regex101演示。

票数 3
EN

Stack Overflow用户

发布于 2015-01-14 00:49:57

使用此正则表达式,然后用空字符串替换匹配。

代码语言:javascript
复制
@"(?<=\b[A-Z])[.\s]+(?=[A-Z]\b)|(?<=\b[A-Z])\.(?=\s[A-Z])"

演示

代码语言:javascript
复制
Regex.Replace(yourString, @"(?<=\b[A-Z])[.\s]+(?=[A-Z]\b)|(?<=\b[A-Z])\.(?=\s[A-Z])", "");
票数 2
EN

Stack Overflow用户

发布于 2015-01-14 01:03:29

您需要使用正则表达式吗?您可以拆分一个名称,然后根据正确的想法插入空格(如果您找到一个新的模式,可能更容易更改)。就像这样:

代码语言:javascript
复制
string FixName(string name)
    {
        StringBuilder sb=new StringBuilder();
        var ar=name.Replace('.',' ').Split(' ');
        for (int i = 0; i < ar.Length; i++)
        {
            sb.Append(ar[i]);
            if (i < ar.Length - 1 && ar[i+1].Length>1)
                sb.Append(" ");
        }
        return sb.ToString();
    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27934093

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档