簡體   English   中英

正則表達式 - 匹配某個字符串並獲取字符串的整數值

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM