如何将一组单个字符和白色 space 替换为相同字符但没有白色 space
How do I replace a set of single characters and white space with the same characters but no white space
我正在尝试标准化 C# 中某些作者姓名的格式。棘手的是那些使用首字母的人。例如,广受欢迎的哈利波特系列的作者可能是以下任何一位:
- JK罗琳
- J.K。罗琳
- J。 K.罗琳
- J·K·罗琳
我想将所有这些标准化为 "JK Rowling"。
我也在尝试解决像 JRR Tolkien 这样的名字,其中有三个首字母而不是两个。
简单替换“.”后,我剩下 "J K Rowling" 或 "J R R Tolkien"。我想将它们转换成 "JK Rowling" 和 "JRR Tolkien".
所以逻辑是:
捕获单个字符后跟任意数量的白色 space 然后再跟但不包括另一个单个字符。从捕获中删除白色 space 并用清理后的字符串替换捕获。
以下是一些示例:
- J R R 托尔金 --> JRR 托尔金
- EL 詹姆斯 --> EL 詹姆斯
- F 斯科特·菲茨杰拉德 --> 无变化
我已经能够捕捉到我需要的角色了:
(\b[a-zA-Z]\b\s*)*
https://www.debuggex.com/r/OLnu3YvvjIumGbQ1
但我不确定从这里到哪里才能用没有任何白色的版本替换捕获 space。
使用此正则表达式,然后将匹配项替换为空字符串。
@"(?<=\b[A-Z])[.\s]+(?=[A-Z]\b)|(?<=\b[A-Z])\.(?=\s[A-Z])"
Regex.Replace(yourString, @"(?<=\b[A-Z])[.\s]+(?=[A-Z]\b)|(?<=\b[A-Z])\.(?=\s[A-Z])", "");
尝试替换
\b(\w)\.?\s*(?!\w\w)
与
.
需要使用正则表达式吗?你可以只拆分一个名字,然后根据你的想法插入空格(如果你找到一个新的模式,可能更容易改变)。像这样:
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();
}
我正在尝试标准化 C# 中某些作者姓名的格式。棘手的是那些使用首字母的人。例如,广受欢迎的哈利波特系列的作者可能是以下任何一位:
- JK罗琳
- J.K。罗琳
- J。 K.罗琳
- J·K·罗琳
我想将所有这些标准化为 "JK Rowling"。
我也在尝试解决像 JRR Tolkien 这样的名字,其中有三个首字母而不是两个。
简单替换“.”后,我剩下 "J K Rowling" 或 "J R R Tolkien"。我想将它们转换成 "JK Rowling" 和 "JRR Tolkien".
所以逻辑是: 捕获单个字符后跟任意数量的白色 space 然后再跟但不包括另一个单个字符。从捕获中删除白色 space 并用清理后的字符串替换捕获。
以下是一些示例:
- J R R 托尔金 --> JRR 托尔金
- EL 詹姆斯 --> EL 詹姆斯
- F 斯科特·菲茨杰拉德 --> 无变化
我已经能够捕捉到我需要的角色了:
(\b[a-zA-Z]\b\s*)*
https://www.debuggex.com/r/OLnu3YvvjIumGbQ1
但我不确定从这里到哪里才能用没有任何白色的版本替换捕获 space。
使用此正则表达式,然后将匹配项替换为空字符串。
@"(?<=\b[A-Z])[.\s]+(?=[A-Z]\b)|(?<=\b[A-Z])\.(?=\s[A-Z])"
Regex.Replace(yourString, @"(?<=\b[A-Z])[.\s]+(?=[A-Z]\b)|(?<=\b[A-Z])\.(?=\s[A-Z])", "");
尝试替换
\b(\w)\.?\s*(?!\w\w)
与 .
需要使用正则表达式吗?你可以只拆分一个名字,然后根据你的想法插入空格(如果你找到一个新的模式,可能更容易改变)。像这样:
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();
}