2 回答

TA貢獻(xiàn)1827條經(jīng)驗(yàn) 獲得超8個(gè)贊
你沒有寫你想對(duì)這個(gè)角色做什么,所以我在這里給你一個(gè)替換角色的解決方案:
string pattern = "(?<!//.*);(?=[^;]*(//|$))";
Console.WriteLine(Regex.Replace("line 1 //comment", pattern, "#"));
Console.WriteLine(Regex.Replace("line2;", pattern, "#"));
Console.WriteLine(Regex.Replace("extra; text; //comment may also contain ;.", pattern, "#"));
輸出:
line 1 //comment
line2#
extra; text# //comment may also contain ;.

TA貢獻(xiàn)1875條經(jīng)驗(yàn) 獲得超5個(gè)贊
正則表達(dá)式有點(diǎn)難看,但它是:
var str = @"line 1 //comment
line2; test;
extra text; //comment may also contain ;.";
var matches = Regex.Matches(str, @"^(?:(?<!//).)+(;)", RegexOptions.Multiline);
if (matches.Count > 0)
{
Console.WriteLine(matches[matches.Count - 1].Groups[1].Index);
}
我們得到每行中最后一個(gè)分號(hào)的匹配項(xiàng)(前面沒有注釋),然后我們查看這些匹配項(xiàng)中的最后一個(gè)。
我們必須逐行執(zhí)行此操作,因?yàn)樽⑨屵m用于整行。
如果您想單獨(dú)處理每一行(您的問題沒有說明這一點(diǎn),但它暗示了這一點(diǎn)),然后循環(huán)matches而不是只查看最后一行。
如果你想用另一個(gè)字符替換每個(gè)分號(hào),那么你可以這樣做:
const string replacement = "#";
var result = Regex.Replace(str, @"^((?:(?<!//).)+);", "$1" + replacement, RegexOptions.Multiline);
如果您想完全刪除它,那么只需:
var result = Regex.Replace(str, @"^((?:(?<!//).)+);", "$1", RegexOptions.Multiline);
如果您只想刪除整個(gè)字符串中的最后一個(gè)分號(hào),那么您可以使用string.Remove:
var matches = Regex.Matches(str, @"^(?:(?<!//).)+(;)", RegexOptions.Multiline);
if (matches.Count > 0)
{
str = str.Remove(matches[matches.Count - 1].Groups[1].Index, 1);
}
- 2 回答
- 0 關(guān)注
- 525 瀏覽
添加回答
舉報(bào)