簡體   English   中英

正則表達式匹配單詞后跟文本的十進制

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM