gpt4 book ai didi

c# - 货币范围正则表达式

转载 作者:行者123 更新时间:2023-11-30 12:30:51 25 4
gpt4 key购买 nike

我正在尝试使用正则表达式在字符串中查找格式正确的货币或数字的范围。我碰巧使用的是 C#,所以正则表达式就是这样格式化的。

例如,我希望能够找到:

$10,000,000 to $20M
$10k-$20k
100.23k - 200.34k
$20000 and $500600
3456646 to 4230405

它不应该匹配:

$10,0000,000 to $20,000,000 //extra zero in first number
20k xyz 40k //middle string does not match a range word

到目前为止,这是我的正则表达式:

(^|\s|\$)([1-9](?:\d*|(?:\d{0,2})(?:,\d{3})*)(?:\.\d*[1-9])?|0?\.\d*[1-9]|0)(|m|k)(?:|\s)(?:|to|and|-|,)(?:|\s)(|\$)([1-9](?:\d*|(?:\d{0,2})(?:,\d{3})*)(?:\.\d*[1-9])?|0?\.\d*[1-9]|0)(\s|m|k)

它似乎运行良好,但有时会匹配我不期望的项目。示例:

1985 xyz 1999 //2 matches, both numbers without xyz
$10,000,000 xyz $20000000 //1 match on the $2000000
$10,000,0000 to $20,000,000 //1 match on the $10,000,0000 (extra zero on end)

我错过了什么?用正则表达式这样做是愚蠢的吗?

最佳答案

给你哥们

(?<=^|\s)\$?\d+((\.\d{2})?(k|M)|(,\d{3})*)\b\s*(to|-|and )\s*\$?\d*((\.\d{2})?(k|M)|(,\d{3})*)(\s|$)

action 中查看.

这部分

\d+((\.\d{2})?(k|M)|(,\d{3})*)

正在重复自己。所以最好将其保存在常量中并将此正则表达式连接在一起。

String moneyPattern = @"\d+((\.\d{2})?(k|M)|(,\d{3})*)";
String rangeConnectorPattern = @"\b\s*(to|-|and\b)\s*";
String moneyRangePattern = @"(?<=^|\s)"+
moneyPattern + rangeConnectorPattern + moneyPattern +
"(\s|$)";

无需编写解析器。

关于c# - 货币范围正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15277789/

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