c# - 如何在“,”之前找到单词?
问题描述
所以,我的问题:我用这个正则表达式来查找单词,但我发现我的正则表达式有问题。
Input: local lvlr,lvll = Audiosource:GetLevel()
@"(local.(?<vars>.*?)=)"
Output: lvlr,lvll
但我需要将他们分开并在同一组中。这是可能的 ?
For example
Output: lvlr
Output: lvll
解决方案
可以使用 C# 正则表达式,因为每个捕获组都会跟踪组捕获集合中的每个捕获。但是,您的正则表达式需要一些调整才能使该功能正常工作。
它看起来像
\blocal\s+(?:(?<vars>\w+),?\s*)+=
请参阅正则表达式演示。更有效的正则表达式版本是
\blocal\s+(?<vars>\w+)(?:,\s*(?<vars>\w+))*\s*=
细节
\b
- 单词边界local
- 一个子串\s+
- 1+ 空格(?:(?<vars>\w+),?\s*)+
- 1 次或多次出现(?<vars>\w+)
- 组“vars”:1 个或多个单词字符,?\s*
- 一个可选的,
,后跟 0+ 个空格
=
- 一个=
符号。
查看示例 C# 代码:
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