簡體   English   中英

適用於圓點的正則表達式

[英]Regular expression that works on dots

我有這個正則表達式:

string[] values = Regex
  .Matches(mystring4, @"([\w-[\d]][\w\s-[\d]]+)|([0-9]+)")
  .OfType<Match>()
  .Select(match => match.Value.Trim())
  .ToArray(); 

這個正則表達式變成了這個字符串:MY LIMITED COMPANY(52100000/58447000)“;

對於這些字符串:

我的有限公司-52100000-58447000

這也適用於非英文字符。

但是,當我有這個字符串時,有一個問題:MY。 有限。 公司。 ,它也將其拆分。 我不要 我不希望該正則表達式在點上起作用。 我怎樣才能做到這一點? 謝謝。

您可以在模式中的每個\\w后面添加點,我也建議刪除不必要的()

string[] values = Regex
      .Matches("MY. LIMITED. COMPANY. (52100000 / 58447000)", @"[\w.-[\d]][\w.\s-[\d]]+|[0-9]+")
      .OfType<Match>()
      .Select(match => match.Value.Trim())
      .ToArray(); 
foreach (var s in values)
    Console.WriteLine(s);

參見C#演示

模式

  • [\\w.-[\\d]] -一個Unicode字母或下划線( [\\w-[\\d]] )或一個點( .
  • [\\w.\\s-[\\d]]+ -1個或多個(由於末尾有+量)字符,它們是Unicode字母或下划線. 或空格( \\s
  • | - 要么
  • [0-9]+ -一個或多個純ASCII數字

我會簡化表達。 如果前面的名字包含數字怎么辦? 並不是說我的解決方案不能完全模仿原始表達式。 名稱部分將允許使用數字。

讓我們從頭開始:

  • 要匹配單詞,您需要的是一系列字符:

    \\ w +

    這將匹配任何包含下划線( _ )的字母數字字符。

  • 考慮到您希望單詞以點結尾的可能性,可以將其添加並使其可選(一個或零個匹配項):

    \\ w + \\。?

    請注意轉義以使其成為實際字符,而不是字符類“任何字符”。

  • 為了匹配后面的另一個潛在單詞,我們現在簡單地復制此匹配項,在前面添加一個空格,然后再次使用*量詞將其設為可選:

    \\ w + \\。?(?:\\ w + \\。?)*

    如果您還沒有看到以?:開頭的組是不匹配的組。 本質上,它的工作原理與通常的組類似,但是不會在結果中保存匹配的組。

  • 就是這樣。 此模式將按預期拆分演示字符串。 當然,這可能沒有涵蓋其他可能的字符。

您可以在此處在線查看此匹配的結果,也可以進行嘗試。

為了測試您的正則表達式(並學習它們),我真的建議您使用http://regex101.com之類的工具

它具有輸入掩碼,可讓您提供模式和目標字符串。 在右側,它將首先向您解釋該模式(以查看是否確實是您所想的),然后在其下方將顯示所有匹配的組。 請記住,它實際上使用了略有不同的正則表達式風格,但這對於如此簡單的模式並不重要。 (我不隸屬於該網站,只是認為它真的很有用。)

另外,要直接使用C#的regex解析器,也可以嘗試使用此Regex Tester 盡管不包含任何解釋,但這也以類似的方式起作用,這對於剛入門的人可能並不理想。

暫無
暫無

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

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