[英]Regex to match words separated by '!' and enclosed between curly brackets '{' '}'
[英]Regex match all words enclosed by parentheses and separated by a pipe
您可以在 C# 中使用無限長的后視(帶有前瞻):
(?<=\([^()]*)\w+(?=[^()]*\))
請參閱正則表達式演示。 詳情:
(?<=\\([^()]*)
- 一個正向后視匹配緊跟在(
和除(
和)
之外的零個或多個字符的位置\\w+
- 一個或多個單詞字符(?=[^()]*\\))
- 匹配一個位置的正向前瞻,該位置緊隨其后是零個或多個字符,而不是(
和)
,然后是)
字符。捕獲這些詞的另一種方法是使用
(?:\G(?!^)\||\()(\w+)(?=[^()]*\))
請參閱此正則表達式演示。 您需要的單詞現在在第 1 組中。詳細信息:
(?:\\G(?!^)\\||\\()
- 前一個匹配之后的位置 ( \\G(?!^)
) 和|
char ( \\|
),或 ( |
) a (
char ( \\(
)(\\w+)
- 第 1 組:一個或多個單詞字符(?=[^()]*\\))
- 正向預測,確保在當前位置右側的除(
和)
之外的任何零個或多個字符之后有一個)
字符。可以使用 C# 提取匹配項
var matches = Regex.Matches(text, @"(?<=\([^()]*)\w+(?=[^()]*\))")
.Cast<Match>()
.Select(x => x.Value);
// Or
var matches = Regex.Matches(text, @"(?:\G(?!^)\||\()(\w+)(?=[^()]*\))")
.Cast<Match>()
.Select(x => x.Groups[1].Value);
在 c# 中,您還可以使用捕獲組來使用組捕獲。
匹配項在命名組word
\((?<word>\w+)(?:\|(?<word>\w+))*\)
\\(
匹配(
(?<word>\\w+)
匹配組word
1+ 個單詞字符(?:
非捕獲組
\\|
匹配|
(?<word>\\w+)
匹配 1+ 個單詞字符)*
關閉非捕獲組並可選擇重復以獲取所有出現次數\\)
匹配右括號
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.