![](/img/trans.png)
[英].Net regex matching $ with the end of the string and not of line, even with multiline enabled
[英]Conditional matching of a string at the end of the line using regex
我需要在C#中創建一個Regex模式,該模式可以接收字符串,捕獲3個組,其中最后一個組僅在字符串以'NoClause結尾的情況下捕獲。 我在下面提供了一個示例輸入,並希望包含3個捕獲組。
輸入樣例:
Header:Select * From TableName WHERE ColumnName = '53 : ABC' ORDER BY NoClause : NoClause
所需輸出:
Group1: 'Header'
Group2: 'Select * From TableName WHERE ColumnName = '53 : ABC''
Group3: 'NoClause'
到目前為止,我的模式是:
(\\w+):{1}(.+)\\s*:\\s*(NoClause)
現在,當將字符串格式化為示例輸入時, 這確實可以工作,但是我遇到的問題是,當輸入字符串不包含':NoClause'時 ,在這些情況下捕獲組不應包含任何內容。 我在下面提供了一些示例,說明何時此方法不起作用但需要。
Header:select * from TableName where ColumnName = '1 ABC'
Header:select * from TableName where ColumnName = '1: ABC'
Header:select * from TableName where ColumnName = '1: ABC' OR ColumnName = '2: DFG' OR ColumnName = '3: HIJ'
使用上述模式時,根本不會捕獲任何東西。 我嘗試使用'?' 作為有條件的,但無法使其符合所有情況。
我一直在https://regex101.com/r/wG3aM3/261上擺弄這些東西。
要考慮的事情
感興趣的是,下面是我的C#代碼。
Match parameters = Regex.Match(inputString, @"(\w+):{1}(.+)\s*:\s*(NoClause)", RegexOptions.IgnoreCase);
var group1 = parameters.Groups[1].Value;
var group2 = parameters.Groups[2].Value;
bool group3 = parameters.Groups[3].Success;
試試這個:
^(\w+):(.+?)(?:\s*:\s*(NoClause|NoWhereClause))?$
您需要將最后一部分設為可選。 另外,您需要在中間使用惰性匹配,以避免將最后一組的內容捕獲到中間。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.