gpt4 book ai didi

c# - 如何不包含正则表达式的一部分

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

我对使用正则表达式还很陌生,我可以弄清楚如何从字符串中提取特定数字。

假设该字符串是任意数量的空格或随机文本,并且其中某处是“值:$1000.00”。

为了检索该值,我目前正在使用:

string value = Convert.ToString(Regex.Match(BodyContent, @"Value:[ \t]*\$?\d*(\.[0-9]{2})?", RegexOptions.Singleline));

因此变量“value”现在存储了“Value: $1000.00”。

我的问题是,使用 Regex 是否有一种方法可以使用“值:”来查找数字值,但仅将实际数字值(即 1000.00)存储在“值”变量中?

最佳答案

一般来说,要完成这样的事情,您至少有 3 个选择:

  • 使用环视 (?=...) , (?<=...) ,这样您就可以精确匹配您想要捕获的内容
    • 一些语言对回顾的支持有限
  • 使用捕获组 (...)捕获特定的字符串
    • 几乎所有风格都得到普遍支持
  • 你也可以只拿substring比赛的
    • 如果要切碎的前缀/后缀的长度是已知常量,则效果很好

引用资料


例子

给定这个测试字符串:

i have 35 dogs, 16 cats and 10 elephants

这些是一些正则表达式模式的匹配:

您也可以进行多次捕获,例如:

  • (\d+) (cats|dogs)产生 2 个匹配结果 ( see on rubular.com )
    • 结果 1:35 dogs
      • 第 1 组捕获 35
      • 第 2 组捕获 dogs
    • 结果 2:16 cats
      • 第 1 组捕获 16
      • 第 2 组捕获 cats

这个特定问题的解决方案

在这种情况下使用捕获组要简单得多(see on ideone.com):

var text = "Blah blah Value: $1000.00 and more stuff";
string value = Convert.ToString(
Regex.Match(
text,
@"Value:[ \t]*\$?(\d*(\.[0-9]{2})?)",
RegexOptions.Singleline
).Groups[1]
);

唯一添加的是:

  • 模式中的一对匹配括号以捕获数字部分
  • 正在访问 .Groups[1]Match对象

关于c# - 如何不包含正则表达式的一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3008810/

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