[英]Regex match word followed by decimal from text
我希望能夠匹配以下示例並返回匹配數組
給定文字:
some word
another 50.00
some-more 10.10 text
another word
匹配應該是(單詞,后跟空格,然后是十進制數字(可選地后跟另一個單詞):
another 50.00
some-more 10.10 text
到目前為止,我有以下內容:
string pat = @"\r\n[A-Za-z ]+\d+\.\d{1,2}([A-Za-z])?";
Regex r = new Regex(pat, RegexOptions.IgnoreCase);
Match m = r.Match(input);
但它只匹配第一項: another 50.00
您沒有考慮-
使用[A-Za-z ]
並僅在換行符后匹配某些文字。
您可以使用以下正則表達式:
[\p{L}-]+\p{Zs}*\d*\.?\d{1,2}(?:\p{Zs}*[\p{L}-]+)?
請參閱正則表達式演示
[\\p{L}-]+
匹配1個或多個字母和連字符, \\p{Zs}*
匹配0個或更多水平空白符號, \\d*\\.?\\d{1,2}
匹配浮點數小數部分中的1到2位數,和(?:\\p{Zs}*[\\p{L}-]+)?
匹配數字后的可選單詞。
這是一個基於Regex.Matches
方法匹配所有Regex.Matches
的C#片段:
var res = Regex.Matches(str, @"[\p{L}-]+\p{Zs}*\d*\.?\d{1,2}(?:\p{Zs}*[\p{L}-]+)?")
.Cast<Match>()
.Select(p => p.Value)
.ToList();
僅供參考:如果您需要匹配整個單詞,您還可以使用單詞邊界\\b
:
\b[\p{L}-]+\p{Zs}*\d*\.?\d{1,2}(?:\p{Zs}*[\p{L}-]+)?\b
還有另一個注意事項:如果你需要匹配變音符號,你可以將\\p{M}
添加到包含\\p{L}
的字符類中:
[\p{L}\p{M}-]+\p{Zs}*\d*\.?\d{1,2}(?:\p{Zs}*[\p{L}\p{M}-]+)?\b
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.