【发布时间】:2010-02-16 14:50:22
【问题描述】:
我正在尝试从 VB.NET 中的字符串解析数字以存储在变量中(还想包括小数点)。
这是一个示例字符串:Refund issued for $27.74
【问题讨论】:
-
可能需要更多上下文。现在我可以简单地回答:“抓住
$之后的所有东西”。 -
这可能也有帮助:txt2re.com
我正在尝试从 VB.NET 中的字符串解析数字以存储在变量中(还想包括小数点)。
这是一个示例字符串:Refund issued for $27.74
【问题讨论】:
$之后的所有东西”。
正如 casperOne 已经指出的那样,一个例子不足以给出完整的解决方案。
正则表达式字符串可能类似于"\\$([0-9]+\\.[0-9]+)" 或"Refund issued for \$(?<Value>[0-9]+\.[0-9]+)"。后者限制性更强。
第二个示例也使用了命名组。如果您有更复杂的场景,这可以更容易地在调用 Regex.Match 后提取匹配项。
Expresso 是一个玩转 .net 风格正则表达式的好工具。
【讨论】:
您实际上并不需要正则表达式,因为从 0 到 9 的每个字符的简单迭代和比较(或对 static IsNumber method on the Char structure 的调用)就可以做到(对不起 C# 代码,这很容易翻译成 VB.NET):
static IEnumerable<char> GetNumericCharacters(this string s)
{
// Check for null.
if (s == null) throw new ArgumentNullException("s");
// Iterate through the characters.
foreach (char c in s)
{
// If a number, return it.
if (char.IsNumber(c)) yield return c;
}
}
当然,正则表达式同样简单:
[0-9]
您可以使用 RegEx 类获取该模式的所有匹配项并将它们连接在一起。
每个解决方案都失败的唯一情况是当您在不同的上下文中有多个数字时,例如:
“用户以每件 0.99 美元的价格购买了 10 件商品”
【讨论】: