gpt4 book ai didi

c# - 正则表达式匹配 4 个 float

转载 作者:太空宇宙 更新时间:2023-11-03 18:49:34 25 4
gpt4 key购买 nike

我终究无法理解为什么以下正则表达式无法匹配 4 个 float 。这些 float 的书写方式有一些规则。

  • float 范围从0到1
  • 如果第一个数字是 0,你可以跳过它
  • 句号后的位数不限。

这些是有效的 float

  • 1
  • 1.0
  • 0.0
  • .0
  • 0.123
  • .123

现在是我尝试过的代码

string input = " 0 0 0 .4";
string regex = @"[0-1]*(\.[0-9]*)*\s[0-1]*(\.[0-9]*)*\s[0-1]*(\.[0-9]*)*\s[0-1]*(\.[0-9]*)*";
Regex r = new Regex(regex, RegexOptions.Compiled);
Match m = r.Match(input);

m.Value 返回“0 0 0”,而我希望它返回“0 0 0 .4”

我试过了

[0-1]{0,1}(\.[0-9]*)*\s[0-1]{0,1}(\.[0-9]*)*\s[0-1]{0,1}(\.[0-9]*)*\s[0-1]{0,1}(\.[0-9]*)*

同样,但看起来 .net 不能很好地处理 {0,1} 语法(或者我只是用错了)

我试过查看 http://www.regular-expressions.info/reference.html并且 {0,1} 至少应该对我的理解有效。

我设法制作了一个与我可以使用的小正则表达式匹配器工具中的字符串匹配的正则表达式,但该正则表达式不适用于 .net Regex 类

更新

我将正则表达式与 Tokenizer 结合使用来解析更大的文档。

结合 Pavel Minaev 和 psasik 编写的以下正则表达式进行了预期的匹配

([0,1]|([0,1]?\.[0-9]+))\s([0,1]|([0,1]?\.[0-9]+))\s([0,1]|([0,1]?\.[0-9]+))\s([0,1]|([0,1]?\.[0-9]+))

下面匹配实际的 float

([0,1]|([0,1]?\.[0-9]+))

最佳答案

对于初学者来说,您的正则表达式通常是错误的 - 由于过度使用 *,它会很乐意匹配 10101.10101.10101 之类的内容。

您的特殊匹配结果的原因是因为您的输入字符串以空格 "" 字符开头。因此比赛是这样的:

  • 第一个[0-1]*匹配开头的空字符串
  • 第一个 (\.[0-9]*)* 匹配空字符串“跟随”该空字符串
  • 第一个\s匹配输入中的起始空格字符
  • second [0-1]* 匹配输入中的 first 0...
  • third \s 匹配输入中的third 空格字符(第三个0 之前的那个)

实际上没有组匹配任何内容(或者更确切地说,它们都匹配空字符串,因为您使用 *)。

关于c# - 正则表达式匹配 4 个 float ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1280615/

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