所以,我的问题是: 我使用此正则表达式查找单词,但在正则表达式上发现了问题。
Input: local lvlr,lvll = Audiosource:GetLevel()
@"(local.(?<vars>.*?)=)"
Output: lvlr,lvll
但是我需要将他们分开并放在同一小组中。有可能吗?
For example
Output: lvlr
Output: lvll
答案 0 :(得分:3)
使用C#正则表达式是可能的,因为每个捕获组都会在组捕获集合内跟踪每个捕获。但是,您的正则表达式需要进行一些调整才能使用该功能。
看起来像
\blocal\s+(?:(?<vars>\w+),?\s*)+=
请参见regex demo。正则表达式的更有效版本是
\blocal\s+(?<vars>\w+)(?:,\s*(?<vars>\w+))*\s*=
详细信息
\b
-单词边界local
-子字符串\s+
-超过1个空格(?:(?<vars>\w+),?\s*)+
-出现1次或以上
(?<vars>\w+)
-组“ vars”:1个或多个单词字符,?\s*
-可选的,
,后跟0+个空格=
-一个=
符号。var s = "local lvlr,lvll = Audiosource:GetLevel()";
var pattern = @"\blocal\s+(?:(?<vars>\w+),?\s*)+=";
var result = Regex.Matches(s, pattern)
.Cast<Match>().Select(p => p.Groups["vars"].Captures)
.ToList();
foreach (var coll in result)
foreach (var v in coll)
Console.WriteLine(v);
输出:
lvlr
lvll