[英]Regex - Match a certain string and get the integer value of the string
我有一个正则表达式:
var example= Regex.Match(result, @"\b(Today is:)[\s:]*(.*)", RegexOptions.IgnoreCase);
然后我转换
example= int.Parse(result.Groups[2].Value, System.Globalization.NumberStyles.AllowThousands);
这在大多数情况下都可以正常工作,但是,我注意到如果今天之后我有额外的字符串是:例如,
Today is (extra):
我上面的正则表达式在这种情况下失败,因为它也抓取“(额外)”然后转到 int.Parse,它失败了。 我希望我的正则表达式在有“今天是:”时匹配,那么即使有更多字符串也没关系,只需获取字符串并转换为 int 值。
例如,今天是:100,000,000 -> 转换并得到 int 100000000
今天是 (abc123): 88,888 -> 转换并得到 int 88888
今天是 (Extra Text blah blah): 100,000 -> 转换并得到 int 100000
我会像这样改变你的正则表达式:
\bToday is\b.*?\s*:\s*([\d,\.]+)
在这里测试: https : //regex101.com/r/jPb6Pa/1
解释:
\\bToday is\\b
用于搜索“今天是”而不是“ Bblablatoday 不是”或类似的东西。
.*?
搜索“今天是”之后的任何内容,但未准备好。
\\s*:\\s*
搜索带有或不带有空格的 ":" 字符。
捕获组 n°1 ([\\d,\\.]+)
将搜索数字、点和逗号,至少一个字符。 它可以改进,因为单个逗号或点是错误的。 但它暂时完成了这项工作。
您可以使用
\bToday\s+is\b(?:.*?\([^()]*\))?.*?\b(\d+(?:,\d{3})*(?:\.\d+)?)
请参阅正则表达式演示。 解析match.Groups[1].Value
。
详情:
\\bToday\\s+is\\b
- Today is
一个完整的单词,中间有一个或多个空格(?:.*?\\([^()]*\\))?
- 除换行符以外的任何零个或多个字符的可选序列,后跟一个(
,零个或多个除(
和)
以外的字符,然后是 a )
字符.*?
- 尽可能少的除换行符以外的零个或多个字符\\b
- 单词边界(\\d+(?:,\\d{3})*(?:\\.\\d+)?)
- 第 1 组:数字模式。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.