簡體   English   中英

C# 正則表達式中的組

[英]Groups in a C# regular expression

我正在使用以下測試器來嘗試找出這個正則表達式: http://derekslager.com/blog/posts/2007/09/a-better-dotnet-regular-expression-tester.ashx

我的輸入: 123stringA 456 stringB

我的模式: ([0-9]{3})(.*?)

該模式最終將是一個日期,但為了這個問題,我將保持簡單並使用我的簡化輸入。

我理解這種模式的方式是“給我 3 個數字 [0-9]{3},后跟任意數量的任何類型的字符。*,直到它到達下一個匹配項?

我想要/期望從這個測試中得到 2 場比賽,每場比賽有 2 組:
第一場比賽
組 1 - 123
第 2 組 - 字符串 A
比賽2
第 1 組 - 456
第 2 組 - 字符串 B

出於某種原因,我提供的鏈接上的測試人員看到有第二組,但它是空白的。 我之前用 PHP 完成了這個,它似乎像我描述的那樣工作,但在 C# 我看到了不同的結果。 您可以提供的任何幫助將不勝感激。

我還應該注意,這可能會擴展多行......

  • 編輯 *

這是實際輸入: 2011-08-09 09:25:57,069 [9] Orchard.Environment.Extensions.ExtensionManager - 加載擴展時出錯 2011-08-09 09:25:57,493 [8] Orchard.Environment.Extensions.ExtensionManager

對於比賽 1,我想得到:2011-08-09 09:25:57 and,069 [9] Orchard.Environment.Extensions.ExtensionManager - 加載擴展時出錯

對於比賽 2:2011-08-09 09:25:57 and,493 [8] Orchard.Environment.Extensions.ExtensionManager

我正在嘗試找到一種很好的方法來解析一個巨大的文本文件中的錯誤日志文件並維護錯誤發生的日期以及隨之而來的詳細信息

第一組匹配 3 個數字,第二組匹配字符串的其余部分,因為模式中沒有任何內容可以阻止.*? 從不匹配字符串的其余部分。

更正:第二組匹配一個空字符串,因為模式中沒有任何內容可以防止.*? 從不匹配空字符串。

.*表示匹配任何零次或多次。 ? 意思是找到最少的次數,所以它選擇零匹配作為最小值。

試試這個模式, ([0-9]{3})([a-zA-Z]*)

不知道為什么該工具會給你這個,但你可以切換到這個在.Net中工作的替代模式

([0-9]{3})([^0-9]*)

http://regexhero.net/tester/?id=155b8e2b-b851-46b9-8a84-b82f8d6963a1

解釋:

在您之前的模式中,非貪婪版本匹配 0 個字符。

在新版本中, [^0-9]表示匹配范圍0-9以外的任何字符(注意否定^說明符)。

更新:給定實際的輸入字符串(在注釋中),模式更改為(假設 OP 想要做什么,這是一個猜測:

,([0-9]{3})([^\n]*)

http://regexhero.net/tester/?id=155b8e2b-b851-46b9-8a84-b82f8d6963a1

根據您的評論,這就是您要匹配的內容

2011-08-09 09:25:57,069 [9] Orchard.Environment.Extensions.ExtensionManager - 加載擴展時出錯 2011-08-09 09:25:57,493 [8] Orchard.Environment.Extensions.ExtensionManager - 加載擴展時出錯

此表達式將匹配第一個捕獲組中的日期和 rest 直到下一個日期或直到第二個捕獲組中的字符串結尾。

(\d{4}(?:-\d{2}){2})(.*?)(?=(?:\d{4}(?:-\d{2}){2}|$))

在 Regexr 上查看

暫無
暫無

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

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