我创建了一个庞大的 .net 正则表达式,它可以工作,但效率很低。我不得不假设有一种更简洁的方式来编写它,但我似乎找不到。
我需要它做什么:
- 匹配正负整数
- 匹配小数点前面有或没有任何数字的正小数和负小数
- 为 .NET 工作,因为它正在 WPF 应用程序中使用
来自任意示例字符串的匹配示例:
- “7”从“7”
- “-4”从“-4 毫米”
- “.345”来自“.345”
- “-.43”从“-.43 厘米”
- "0.16" 从 "$0.16"
- “-10.04” “-10.04”
我需要避免的:
- 将范围内的第二个数字匹配为负数
*例如:在“1000-3500 RPM”中匹配“-3500”(应该匹配 1000 和 3500)
我的正则表达式:
(?<![0-9])(-)\.\d+|(?<![0-9])(-)\d+\.\d+|(?<![0-9])(-)\d+|\.\d+|\d+\.\d+|\d+
故障:
?<![0-9])(-)\.\d+
- 小数点前没有数字的负小数,然后确保破折号前没有数字
或者
(?<![0-9])(-)\d+\.\d+
- 小数点前带有数字的负小数,然后确保破折号前没有数字
或者
?<![0-9])(-)\d+
- 一个在破折号前没有数字的负整数
或者
\.\d+
- 找到一个前面没有数字的正小数
或者
\d+\.\d+
- 找到前面数字的正小数
或者
\d+
- 找到一个正整数
现在,据我了解,这应该能够组合成更少的“或”段。我猜你至少可以结合正面和负面的情况,可能还有小数的可选数字。任何提高的性能将不胜感激。
谢谢。