我想在首字母中添加句號,并確保所有字母都大寫。但是,如果已經給出了句號,則不要添加一個。
想要的結果:
abc => ABC
Abc => ABC
Abc => ABC
Ab.C => ABC
ABC => ABC
ABC => ABC
ABC=> ABC
我想象正則運算式替換將適合/最佳。到目前為止,我只能想出以下代碼:
Regex.Replace(initials, @"\w{1}", m => m ".").ToUpper();
這僅適用于字串中沒有句點的情況,否則,它只會連續添加兩個句點(ieabc => a..b..c..)
如果更推薦除正則運算式替換之外的其他方法,我熱烈歡迎它們。我在 c# 中作業,但也希望將這個問題也適用于其他語言。
uj5u.com熱心網友回復:
我建議
\p{L}\.*
模式,或(c# 代碼):
initials = Regex.Replace(
initials,
@"\p{L}\.*",
m => $"{m.Value.Trim('.').ToUpper()}.");
模式解釋:
\p{L} - unicode letter
\.* - zero or more dots ('.')
演示:
string[] tests = new string[] {
"abc",
"Abc",
"A.b.c",
"Ab.C",
"ABC",
"A.B.C",
"A.B.C.",
};
string report = string.Join(Environment.NewLine, tests
.Select(test => $"{test,7} => {Regex.Replace(test, @"\p{L}\.*", m => $"{m.Value.Trim('.').ToUpper()}.")}"));
Console.Write(report);
結果:
abc => A.B.C.
Abc => A.B.C.
A.b.c => A.B.C.
Ab.C => A.B.C.
ABC => A.B.C.
A.B.C => A.B.C.
A.B.C. => A.B.C.
uj5u.com熱心網友回復:
我不太了解,c#但拼湊了以下內容:
using System;
using System.Collections;
using System.Text.RegularExpressions;
class Program
{
static void Main() {
var txt = "Ab.C";
var new_txt = Regex.Replace(txt, @"(\w)\.?", @"$1.").ToUpper();
Console.Write(new_txt);
}
}
圖案的(\w)\.?意思是:
(\w)- 一個字字符的捕獲組。\.?- 后跟一個可選的點。
請注意,那時\w可以捕獲更多。請參閱此處的檔案。這意味著您可能希望使用字符類更具體。c#[A-Za-z0-9_]
uj5u.com熱心網友回復:
您還可以使用重復捕獲組來使用捕獲集合來重復 n 次字符,后跟一個可選的點。
(?:(\w)\.?){3,}
請參閱.NET 正則運算式演示。
例如:
string[] strings = {
"abc",
"Abc",
"Ab.C",
"ABC",
"A.B.C",
"A.B.C."
};
foreach (String s in strings)
{
Console.WriteLine(Regex.Replace(
s,
@"(?:(\w)\.?){3,}",
m => string.Join("", m.Groups[1].Captures.Select(x => x ".")).ToUpper())
);
}
輸出
A.B.C.
A.B.C.
A.B.C.
A.B.C.
A.B.C.
A.B.C.
uj5u.com熱心網友回復:
沒有 RegEx 的方法
string result = string.Concat(input.Where(IsLetter).Select(x => char.ToUpper(x) "."));
https://dotnetfiddle.net/macBWv
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/408165.html
標籤:
下一篇:字符出現在字串的任何位置?
