![](/img/trans.png)
[英]C# need regular expression to capture the second occurence after a underscore
[英]Regex to match words between underscores after second occurence of underscore
所以我想在下划線第二次出現后在下划線之間添加單詞
這是我的字符串
ABC_BC_BE08_C1000004_0124
我已經組裝了這個表達式
(?<=_)[^_]+
很好,它符合我的需要,但只跳過第一個詞,因為它前面沒有下划線。 我希望它跳過 ABC 和 BC,只獲取最后三個字符串,我試過亂搞,但我被卡住了,無法讓它工作。 謝謝!
您可以在此處使用Split
和Skip
的非正則表達式方法:
var text = "ABC_BC_BE08_C1000004_0124";
var result = text.Split('_').Skip(2);
foreach (var s in result)
Console.WriteLine(s);
Output:
BE08
C1000004
0124
請參閱C# 演示。
使用正則表達式,您可以使用
var result = Regex.Matches(text, @"(?<=^(?:[^_]*_){2,})[^_]+").Cast<Match>().Select(x => x.Value);
(?<=^(?:[^_]*_){2,})
- 正向后視匹配與當前位置左側緊鄰的以下模式匹配的位置:
^
- 字符串的開始(?:[^_]*_){2,}
- 兩個或多個 ( {2,}
) 序列,除了_
( [^_]*
) 之外的任何零個或多個字符,然后是一個_
字符[^_]+
- _
以外的一個或多個字符Usign .NET 還有一個捕獲集合,您可以將其與正則表達式和重復的 catpure 組一起使用。
^[^_]*_[^_]*(?:_([^_]+))+
模式匹配:
^
字符串開始[^_]*_[^_]*
匹配除_
之外的任何字符,匹配_
並再次匹配除_
之外的任何字符(?:
非捕獲組
_([^_]+)
匹配_
並捕獲第 1組中除_
以外的任何字符 1 次或多次)+
關閉非捕獲組,重復1次或多次例如:
var pattern = @"^[^_]*_[^_]*(?:_([^_]+))+";
var str = "ABC_BC_BE08_C1000004_0124";
var strings = Regex.Match(str, pattern).Groups[1].Captures.Select(c => c.Value);
foreach (String s in strings)
{
Console.WriteLine(s);
}
Output
BE08
C1000004
0124
如果只想匹配下划線之間的單詞字符,模式的另一個選項可能是使用否定字符 class [^\W_]
從單詞字符中排除下划線:
^[^\W_]*_[^\W_]*(?:_([^\W_]+))+
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.