正则表达式在分隔符之间捕获

时间:2015-11-29 00:47:25

标签: c# .net regex

我有以下正则表达式

^.*(?<width>\d*)x(?<height>\d*).*$

并且想要解析这个字符串,这样我就可以获得宽度和高度,但只能捕获高度。我捕获的错误是什么?

iPhone (320x50 pt)

2 个答案:

答案 0 :(得分:2)

第一个.*过于贪婪并且匹配太多(一切都达到x - 因为\d*允许匹配空字符串)。您可以使用非贪婪的.*?

^.*?(?<width>\d*)x(?<height>\d*).*$

或者,匹配第一部分中的非数字:

^[^\d]*(?<width>\d*)x(?<height>\d*).*$

如果宽度始终以(开头,则可以指定它:

^.*\((?<width>\d*)x(?<height>\d*).*$

这里有多种可能性,这完全取决于您尝试匹配的字符串。仅从一个例子中很难说哪种方法最适合你。

答案 1 :(得分:1)

这是因为你的第一个。*是贪婪的并且捕获所有内容直到x,因为你允许0-n数字。

所以我看到两个快速替换:

^\D*(?<width>\d*)x(?<height>\d*)\D*$

将在宽度

之前搜索非数字

你也可以

^.*?(?<width>\d*)x(?<height>\d*).*?$

这将是一次非贪婪的搜索。

https://regex101.com/r/lD7aA0/1

上查看此尝试