以下是我可能的测试字符串:(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。
答案 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
必须是该组中的第一个替代方案,因为它比0
或18
更长,并且应该在任何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)