c# - 如果名称中的所有字符都是大写的,则在其前面加一个逗号
问题描述
我在程序中使用的名称如下:Jenny BLACK
, Helen BROWN EYE
, Henna Tamara GREEN
. 如果此人有多个名字或多个姓氏,我想在姓氏之前加一个逗号。我怎样才能做到这一点?我们可以通过所有字母都大写来区分字符串是姓氏。
像这样的方法,也许我可以得到我想要的很长的路要走,但听起来一点也不专业。
string author_final = "";
var aut_examp = new List<string>{"Jenny BLACK", "Helen BROWN EYE", "Henna Tamara GREEN"};
if (aut_examp.Count > 1)
{
var i = 1;
foreach (var aut in aut_examp)
{
var and = i < aut_examp.Count ? "&" : "";
var explodes = aut.Split(new[] { $" " }, StringSplitOptions.None);
foreach (var ex in explodes)
{
if (ex.All(char.IsUpper) // ...
// With a method like this, maybe I can get what I want a very long way, but it doesn't sound professional at all.
}
author_final += aut + and;
i++;
}
}
else
{
author_final = aut_examp[0];
}
解决方案
在 LINQ 中,你可以将你的名字分解成单词,然后用“take while name contains lower case chars”、逗号、“skip while name contains lower chars”重新组合它们
new [] {"Jenny BLACK", "Helen BROWN EYE", "Henna Tamara GREEN"}
.Select(n =>
string.Join(" ", n.Split().TakeWhile(o => o.Any(Char.IsLower))) +
", " +
string.Join(" ", n.Split().SkipWhile(o => o.Any(Char.IsLower)))
);
我想我宁愿让正则表达式找到我第一个全大写单词的索引并插入一个逗号..
new [] {"Jenny BLACK", "Helen BROWN EYE", "Henna Tamara GREEN"}
.Select(n => n.Insert(Regex.Match(n, " [A-Z]+\\b").Index, ","))
推荐阅读
- python - Scrapy:如何在 302 的情况下停止请求?
- css - 将滑出面板置于顶部导航下方
- python - TemplateDoesNotExist 在 /。我不知道我错在哪里
- c# - 将通用配置元素提取到共享文件中
- r - 如何根据r中的分类列更改highchart中折线图的颜色?
- python - PyCharm 绘图问题“进程以退出代码 139 完成(被信号 11:SIGSEGV 中断)”
- python - Python - Tkinter - 如何从菜单中删除所有命令
- python - 将属性添加到 Python 中的内置类?(用于检测井字游戏中的胜利)
- php - 如何从 php 中的 pre 标签解析 XML?
- python - 如何阻止在某些不同区域产生随机范围?