带有前缀字符串的正则表达式匹配模式

时间:2015-12-26 19:02:01

标签: javascript regex

以下是我可能的测试字符串:(opacity=50)(opacity=100)/opacity=([1-9][0-9]?|100)/,不透明度值的规则必须落在[0,100]中。

我在Javascript中的from xml.dom import minidom import sys import os, fnmatch def find_files(directory, pattern): for root, dirs, files in os.walk(directory): for basename in files: if fnmatch.fnmatch(basename, pattern): filename = os.path.join(root, basename) yield filename for filename in find_files('c:/Python27','*file.xml'): print ('Found file.xml:', filename) def xmlparse(): xmldoc = minidom.parse(filename) itemlist = xmldoc.getElementsByTagName('Game') for item in itemlist: year = item.getElementsByTagName('Year') for s in year: print item.attributes['name'].value, s.attributes['value'].value 尝试。但它没有捕获100。

以下是用于调试的link

3 个答案:

答案 0 :(得分:1)

将100作为第一选择并将?量词移动到[1-9]字符类:

opacity=(100|[1-9]?[0-9])

然而20中的此正则表达式also matches opacity=200

为确保仅匹配0到100 ,您应添加\b字边界:

opacity=(100|[1-9]?[0-9])\b
                         ^^

请参阅another demo

请注意,100必须是该组中的第一个替代方案,因为它比018更长,并且应该在任何1位或2位之前进行测试数字,因为正则表达式引擎从左到右搜索匹配。 但是,使用\b 时,替代品的顺序无关紧要,因为它需要在数字后面显示单词边界。

答案 1 :(得分:1)

你的问题是,正则表达式是贪婪的。您的第一个拥有2位数字的捕获组会自动抓取所有内容。这种行为被称为"贪婪"。

opacity=([1-9][0-9]?|100)\b

一个变化可能是在正则表达式的最后。 \b告诉你的正则表达式测试人员这个词/数字在这里结束。

或者,您可以将100放在2位数字前面

opacity=(100|[1-9][0-9]?)\b

这样它仍然可以贪婪(从左到右)并首先搜索你的100。这正是你想要的行为。

答案 2 :(得分:-2)

试试这个

opacity=(100|\d{1,2})

regex test