簡體   English   中英

C#:更改正則表達式的NumberDecimalSeparator

[英]C#: Change NumberDecimalSeparator for Regex

我正在使用正則表達式使用小數點分隔符來解析十進制值,這些格式為美國格式,例如:2.56

但是,我的系統的區域性小數點分隔符設置為逗號,因此當我使用十進制類\\ d時,正則表達式無法將“ 2.56”識別為有效的十進制數。

為了便於閱讀和簡化,我想堅持使用\\ d。 我可以強制將點識別為小數點分隔符嗎?

當使用float.TryParse()時,我可以強制它使用點作為小數點分隔符:

var usCulture = System.Globalization.CultureInfo.CreateSpecificCulture("en-US");
float.TryParse(text, System.Globalization.NumberStyles.Number, usCulture, out s )

我可以為正則表達式做類似的事情嗎?

我試圖改變當前線程的文化:

Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-US");

但它似乎並不影響正則表達式,但仍希望逗號作為小數點分隔符。

為了便於閱讀和簡化,我想堅持使用\\d 我可以強制將點識別為小數點分隔符嗎?

不,這是因為\\d[0-9]簡寫。 它不適合其他任何東西,包括分隔符。

如果要匹配小數,則需要如下所示:

-?\d+(\.\d+)?

演示版

好吧, \\d是任何Unicode 數字 ,而不是浮點數 如果您堅持使用正則表達式 ,則必須手動構建模式。 在最簡單的情況下(沒有指數部分 ,沒有千位分隔符任意長度等),它可以是

  string escapedSeparator = Regex.Escape(
    CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator);

  string pattern = $"^-?[0-9]+({escapedSeparator}[0-9]+)?$";

  if (Regex.IsMatch("-123.456", pattern)) {
    ...
  }

真的懷疑它是否比double.TryParse(...) 專門設計的 double.TryParse(...)更好。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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