考慮以下字串:
"via caporale degli zuavi 278a , 78329"
和
"autostrada a1 km - 47"
我希望隔離可以存在(第一個示例)或不存在(第二個示例)的特定序列
特別是,我正在尋找一個數字序列,它可以是 1 到 4 位長并且可以后跟一個字母,但在字串中也不能有子字串“km”。所以在我之前的例子中,“278a”是有效的,但其余的數字序列不是。
到目前為止,我所做的如下:
因為我知道任何包含“km”的字串都是無效的,所以我應用了這段代碼:
if(!stripped.ToLower().Contains("km"))
{
// apply Regex
}
else
// string not valid, move on
我知道這個正則運算式會給我所有的數字序列 : Regex.Matches(t, @"\d ");,但這還不夠。我怎樣才能從這里開始?
編輯:為了進一步澄清,當一個數字序列后跟一個字母時,該字母必須是下一個字符(所以沒有空格或其他任何東西)
Edit2:請注意,數字序列后面可以跟一個字母(所以 278a 和 278 一樣有效)
uj5u.com熱心網友回復:
您可以在左側和右側斷言不 km,并在組中捕獲 1-4 位數字 0-9 并匹配和一個字符 a-zA-Z:
(?<!\bkm\b.*)\b[0-9]{1,4}[A-Za-z]?\b(?!.*\bkm)
(?<!\bkm\b.*)斷言不向左公里\b[0-9]{1,4}[A-Za-z]\b匹配 1-4 位數字 0-9 并匹配單個字符 A-Za-z(?!.*\bkm)斷言不是公里向右
.NET 正則運算式演示
string pattern = @"(?<!\bkm\b.*)\b[0-9]{1,4}[A-Za-z]?\b(?!.*\bkm)";
string input = @"via caporale degli zuavi 278a , 78329
via caporale degli zuavi 277 , 78329
via caporale degli zuavi 279a , 78329 km
km via caporale degli zuavi 280a , 78329
autostrada a1 km - 47";
foreach (Match m in Regex.Matches(input, pattern))
{
Console.WriteLine(m.Value);
}
輸出
278a
277
如果預期只有 1 個匹配項,您還可以排除整個字串中的 km,并使用捕獲組以及 Regex.Match
^(?!.*\bkm\b).*\b([0-9]{1,4}[A-Za-z]?)\b
正則運算式演示
uj5u.com熱心網友回復:
您可以使用
^(?!.*(?<!\p{L})km\b)(?:.*\D)?(\d{1,4})(?=\p{L}?\b)
請參閱.NET 正則運算式演示。詳情:
^- 字串的開始(?!.*(?<!\p{L})km\b)- nokm單詞前面沒有任何字母,字串中的任何地方都允許后面沒有字母數字/下劃線(?:.*\D)?- 除換行符以外的任意零個或多個字符的可選序列,盡可能多,然后是非數字字符(\d{1,4})- 第 1 組:一到四位數字(?=\p{L}?\b)- 在右側,應該有一個可選字母,后面沒有任何字母數字或連接符標點符號(如_)。
查看C# 演示:
var l = new List<string> {"via caporale degli zuavi 278a , 78329","autostrada a1 km - 47"};
foreach (var t in l)
{
var rx = @"^(?!.*(?<!\p{L})km\b)(?:.*\D)?(\d{1,4})(?=\p{L}?\b)";
var match = Regex.Match(t, rx, RegexOptions.ECMAScript)?.Groups[1].Value;
if (!string.IsNullOrEmpty(match))
{
Console.WriteLine($"There is a match in '{t}': {match}");
}
else
{
Console.WriteLine($"There is no match in '{t}'.");
}
}
輸出:
There is a match in 'via caporale degli zuavi 278a , 78329': 278
There is no match in 'autostrada a1 km - 47'.
該RegexOptions.ECMAScript選項用于\d僅匹配 ASCII 數字(\p{L}盡管它不影響)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/380860.html
上一篇:在Julia中切割檔案
