C# 仅匹配浮点数的正则表达式
嗨,我需要一个正则表达式,从右到左只提取浮点数 示例字符串 每股权益收益(在<代码>中)每股面值<代码>2 1675.10 1252.56 我当前的C# 仅匹配浮点数的正则表达式,c#,regex,C#,Regex,嗨,我需要一个正则表达式,从右到左只提取浮点数 示例字符串 每股权益收益(在中)每股面值2 1675.10 1252.56 我当前的Regex (\+\124;-)?[0-9][0-9]*(\,[0-9]*)?(\.[0-9]*)?具有从右到左的Rex选项 但是 电流输出为 1,252.56 1,675.10 26 2 但是,我不想在26或2 请帮帮我,也许这样会有帮助 Regex /[-+]?[0-9,\.]*([,\.])[0-9]*/g 示例输入 45.345 1252.56 -12
Regex
(\+\124;-)?[0-9][0-9]*(\,[0-9]*)?(\.[0-9]*)?
具有从右到左的Rex选项
但是
电流输出为
1,252.56
1,675.10
26
2
但是,我不想在26
或2
请帮帮我,也许这样会有帮助 Regex
/[-+]?[0-9,\.]*([,\.])[0-9]*/g
示例输入
45.345
1252.56
-1223423423.342
1675.1
1252.56
收入-34 5 b4 pe8r blah4 t3st+-(英寸)1252.56面
-1223423423.342/1675.10 1252.56
匹配
1,252.56
-12234,23423.342
1,675.10
1,252.56
解释
[-+]?
匹配下表中的单个字符
- 量词:
在零和一时间之间,尽可能多次,根据需要回馈[贪婪]?
列表中的单个字符-+
[0-9,\.]*
匹配下表中的单个字符
- 量词:
介于零次和无限次之间,尽可能多次,根据需要回馈[贪婪]*
介于0-9
和0
之间的单个字符9
文字字符,
,
按字面意思匹配字符\。
([,\.])
匹配下表中的单个字符[,\.]
文字字符,
,
按字面意思匹配字符\。
[0-9]*
匹配下表中的单个字符
- 量词:
介于零次和无限次之间,尽可能多次,根据需要回馈[贪婪]*
介于0-9
和0
之间的单个字符9
g
修改器:全局。所有比赛(第一场比赛时不要返回)也许这样会有帮助
Regex
/[-+]?[0-9,\.]*([,\.])[0-9]*/g
示例输入
45.345
1252.56
-1223423423.342
1675.1
1252.56
收入-34 5 b4 pe8r blah4 t3st+-(英寸)1252.56面
-1223423423.342/1675.10 1252.56
匹配
1,252.56
-12234,23423.342
1,675.10
1,252.56
解释
[-+]?
匹配下表中的单个字符
- 量词:
在零和一时间之间,尽可能多次,根据需要回馈[贪婪]?
列表中的单个字符-+
[0-9,\.]*
匹配下表中的单个字符
- 量词:
介于零次和无限次之间,尽可能多次,根据需要回馈[贪婪]*
介于0-9
和0
之间的单个字符9
文字字符,
,
按字面意思匹配字符\。
([,\.])
匹配下表中的单个字符[,\.]
文字字符,
,
按字面意思匹配字符\。
[0-9]*
匹配下表中的单个字符
- 量词:
介于零次和无限次之间,尽可能多次,根据需要回馈[贪婪]*
介于0-9
和0
之间的单个字符9
g
修改器:全局。所有匹配项(第一次匹配时不返回)尽管这是一个Regex
问题,但也标记为C
下面是一个示例,说明了如何更好地控制输出
它也是特定于文化的,只拾取小数点后的数字,并且没有误报
方法
private List<double> GetNumbers(string input)
{
// declare result
var resultList = new List<double>();
// if input is empty return empty results
if (string.IsNullOrEmpty(input))
{
return resultList;
}
// Split input in to words, exclude empty entries
var words = input.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
// set your desirted culture
var culture = CultureInfo.CreateSpecificCulture("en-GB");
// Refine words into a list that represents potential numbers
// must have decimal place, must not start or end with decimal place
var refinedList = words.Where(x => x.Contains(".") && !x.StartsWith(".") && !x.EndsWith("."));
foreach (var word in refinedList)
{
double value;
// parse words using designated culture, and the Number option of double.TryParse
if (double.TryParse(word, NumberStyles.Number, culture, out value))
{
resultList.Add(value);
}
}
return resultList;
}
输出
45.345
1252.56
-1223423423.342
1675.1
1252.56
附加注释
1,252.56
-12234,23423.342
1,675.10
1,252.56
您可以了解有关double.TryParse及其选项的更多信息
您可以了解有关CultureInfo类的更多信息,尽管这是一个
Regex
问题,但它也被标记为C
下面是一个示例,说明了如何更好地控制输出
它也是特定于文化的,只拾取小数点后的数字,并且没有误报
方法
private List<double> GetNumbers(string input)
{
// declare result
var resultList = new List<double>();
// if input is empty return empty results
if (string.IsNullOrEmpty(input))
{
return resultList;
}
// Split input in to words, exclude empty entries
var words = input.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
// set your desirted culture
var culture = CultureInfo.CreateSpecificCulture("en-GB");
// Refine words into a list that represents potential numbers
// must have decimal place, must not start or end with decimal place
var refinedList = words.Where(x => x.Contains(".") && !x.StartsWith(".") && !x.EndsWith("."));
foreach (var word in refinedList)
{
double value;
// parse words using designated culture, and the Number option of double.TryParse
if (double.TryParse(word, NumberStyles.Number, culture, out value))
{
resultList.Add(value);
}
}
return resultList;
}
输出
45.345
1252.56
-1223423423.342
1675.1
1252.56
附加注释
1,252.56
-12234,23423.342
1,675.10
1,252.56
您可以了解有关double.TryParse及其选项的更多信息
您可以了解有关CultureInfo类的更多信息是否需要使用regex?我认为极小的c#程序将是最简单的解决方案。你选择数字的规则是什么?不知道最后两个数字?或者如果数字位于字符串旁边,则不获取该数字?(+|-)?[0-9][0-9](\,[0-9])?(\)[0-9]*是否需要使用正则表达式?我认为极小的c#程序将是最简单的解决方案。你选择数字的规则是什么?不知道最后两个数字?或者,如果它是在一个字符串的旁边?(0+9[09](\,[09])?(\[9])<代码> 1223423423.342 < /代码>不是一个我认为有效的浮点值。公平的注释,虽然它对解决原始帖子有很长的路要,并且确实显示了一些下落<代码> 1。