我试图在C#中标准化一些作者名字的格式。棘手的是那些使用首字母的人。例如,流行的“哈利·波特”系列的作者可能就是其中之一:
我想标准化所有这些"JK罗琳“。
我也试图解决像JRR Tolkien这样的名字,这里有三个首字母,而不是两个。
在简单地替换了".“之后,我剩下了"J K罗琳”或"J R R Tolkien“。我想把这些翻译成"JK罗琳“和"JRR Tolkien”。
因此,逻辑是:捕获单个字符,后面是任意数量的空格,然后是(但不包括)另一个字符。从捕获中删除空白,并用已清除的字符串替换捕获。
以下是一些样本:
我已经到了能够捕捉到我所需要的角色的地步:
(\b[a-zA-Z]\b\s*)*https://www.debuggex.com/r/OLnu3YvvjIumGbQ1
但我不知道从哪里出发,以便用一个没有任何空白的版本来代替捕获。
发布于 2015-01-14 00:53:38
发布于 2015-01-14 00:49:57
使用此正则表达式,然后用空字符串替换匹配。
@"(?<=\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])", "");发布于 2015-01-14 01:03:29
您需要使用正则表达式吗?您可以拆分一个名称,然后根据正确的想法插入空格(如果您找到一个新的模式,可能更容易更改)。就像这样:
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();
}https://stackoverflow.com/questions/27934093
复制相似问题