gpt4 book ai didi

c# - 正则表达式匹配单词后跟文本中的小数

转载 作者:行者123 更新时间:2023-11-30 15:23:53 24 4
gpt4 key购买 nike

我希望能够匹配以下示例并返回匹配数组

给定文本:

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}-]+)?

参见 regex demo

[\p{L}-]+匹配1个或多个字母和连字符,\p{Zs}*匹配0个或多个水平空白符号,\d*\.?\d{1,2} 匹配小数部分为 1 到 2 位的 float ,(?:\p{Zs}*[\p{ L}-]+)? 匹配数字后的可选单词。

这里是一个 C# 片段匹配基于 Regex.Matches method 的所有事件:

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

关于c# - 正则表达式匹配单词后跟文本中的小数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33786590/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com