[英]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.