C#RegEx - 只获取字符串中的第一个匹配项

bug*_*ixr 4 c# regex

我有一个输入字符串,如下所示:

level=<device[195].level>&name=<device[195].name>

我想创建一个将解析每个<device>标签的RegEx,例如,我希望从我的输入字符串中匹配两个项目:<device[195].level>和<device[195].name>.

到目前为止,我对这个模式和代码运气不错,但它总是发现两个设备标签都是一个匹配:

var pattern = "<device\\[[0-9]*\\]\\.\\S*>";
Regex rgx = new Regex(pattern);
var matches = rgx.Matches(httpData);
Run Code Online (Sandbox Code Playgroud)

结果是matches包含值的单个结果<device[195].level>&name=<device[195].name>

我猜测必须有一种'终止'模式的方法,但我不确定它是什么.

Luc*_*ski 6

使用非贪婪量词:

<device\[\d+\]\.\S+?>
Run Code Online (Sandbox Code Playgroud)

另外,使用逐字字符串来转义正则表达式,它使它们更具可读性:

var pattern = @"<device\[\d+\]\.\S+?>";
Run Code Online (Sandbox Code Playgroud)

作为旁注,我想在你的情况下使用\w而不是\S更符合你的意图,但我离开了\S因为我不知道.