我有以下正则表达式
^.*(?<width>\d*)x(?<height>\d*).*$
并且想要解析这个字符串,这样我就可以获得宽度和高度,但只能捕获高度。我捕获的错误是什么?
iPhone (320x50 pt)
答案 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*).*?$
这将是一次非贪婪的搜索。
上查看此尝试