如何使用python规则化宽度和高度x2
我必须做很多工作来改变这种状况:如何使用python规则化宽度和高度x2,python,regex,Python,Regex,我必须做很多工作来改变这种状况: <img src = "/" height="111" width="10" /> 到 所以我想使用python正则表达式 这是我的代码: import re s = '<img src = "werwerwe" height="111" width="10" />' def a(x): print x.group(2) print x.group(4) ss = re.sub(r'''<img.*(
<img src = "/" height="111" width="10" />
到
所以我想使用python正则表达式
这是我的代码:
import re
s = '<img src = "werwerwe" height="111" width="10" />'
def a(x):
print x.group(2)
print x.group(4)
ss = re.sub(r'''<img.*(width\s*="?(\d+)"?)*\s*(height\s*="?(\d+)"?)*''',a, s)
print ss
重新导入
s=“”
def a(x):
打印x组(2)
打印x组(4)
ss=re.sub(r'')
def a(x):
b=x.组(0)
b=b.replace(x.group(1),str(int(x.group(1))*2))
b=b.replace(x.group(2),str(int(x.group(2))*2))
返回b
ss=re.sub(r'']*>'',a,s)
打印ss
尝试使用以下正则表达式:
尝试使用以下正则表达式:
不要使用正则表达式解析HTML。请使用BeautifulSoup
import re
s = '<img src = "/" height="111" width="10" />'
def a(x):
b = x.group(0)
b = b.replace(x.group(1),str(int(x.group(1))*2))
b = b.replace(x.group(2),str(int(x.group(2))*2))
return b
ss = re.sub(r'''<img.*?height=\"(\d+)\".*?width=\"(\d+)\"[^>]*>''',a, s)
print ss
>>从BeautifulSoup导入BeautifulSoup
>>>ht='foo无论什么:'
>>>汤=美汤(ht)
>>>汤
foo无论什么:
>>>soup.findAll('img'))
[, ]
>>>对于汤中的img.findAll('img'):
…ht=int(img['height'])
…wi=int(img['width'])
…img['height']=str(ht*2)
…img['width']=str(wi*2)
...
...
>>>打印汤。美化
福
无论什么:
-
>>>
不要使用正则表达式解析HTML。请使用BeautifulSoup
import re
s = '<img src = "/" height="111" width="10" />'
def a(x):
b = x.group(0)
b = b.replace(x.group(1),str(int(x.group(1))*2))
b = b.replace(x.group(2),str(int(x.group(2))*2))
return b
ss = re.sub(r'''<img.*?height=\"(\d+)\".*?width=\"(\d+)\"[^>]*>''',a, s)
print ss
>>从BeautifulSoup导入BeautifulSoup
>>>ht='foo无论什么:'
>>>汤=美汤(ht)
>>>汤
foo无论什么:
>>>soup.findAll('img'))
[, ]
>>>对于汤中的img.findAll('img'):
…ht=int(img['height'])
…wi=int(img['width'])
…img['height']=str(ht*2)
…img['width']=str(wi*2)
...
...
>>>打印汤。美化
福
无论什么:
-
>>>
。使用以下内容正确解析它
import lxml.html
html=“”
etree=lxml.html.fromstring(html)
images=etree.xpath(“//img”)
对于图像中的图像:
h=int(image.attrib['height']))
w=int(image.attrib['width'])
image.attrib['height']=str(h*2)
image.attrib['width']=str(w*2)
打印lxml.html.tostring(etree)
给出:
。使用以下内容正确解析它
import lxml.html
html=“”
etree=lxml.html.fromstring(html)
images=etree.xpath(“//img”)
对于图像中的图像:
h=int(image.attrib['height']))
w=int(image.attrib['width'])
image.attrib['height']=str(h*2)
image.attrib['width']=str(w*2)
打印lxml.html.tostring(etree)
给出:
尝试使用正则表达式解析HTML不会带来任何好处。不管你做什么,它最终都会崩溃
因此,使用一个html解析器,比如python的HTMLParser,它将解码所有html文本,您只需将其打印出来并进行更改
另一方面,像您正在做的那样修改html看起来很可疑。您可能正在做一些非常困难的事情。尝试使用正则表达式解析html不会带来任何好处。无论您做什么,它最终都会崩溃
因此,使用一个html解析器,比如python的HTMLParser,它将解码所有html文本,您只需将其打印出来并进行更改
另一方面,像你正在做的那样修改html看起来很可疑。你可能正在做一些非常困难的事情。再次,这项任务应该由html解析器(如建议和)完美解决。
如果仍要使用正则表达式,可以使用此正则表达式:
将匹配以下组:
- 第1组:
“宽度”
- 第二组:
“10”
- 第三组:
“高度”
- 第四组:
“111”
在文本中:
它将匹配:
- 第一组:
“高度”
- 第二组:
“111”
- 第三组:
“宽度”
- 第四组:
“10”
现在,无论width
是在height
之前,还是在height
之前,它都是匹配的,我认为这4组在进行替换时为您提供了足够的信息
编辑:
我捕获了组height
和width
,以便您知道哪个值首先匹配(否则,如果您获得111
和10
,您将不知道哪个值是height
和width
),但我不认为这在您的情况下是必要的,因为您所要做的就是复制这两个值,但是如果您希望在不同的值中增加高度和宽度,那么这可能会很有用。再次,这项任务应该由HTML解析器(如建议的和建议的)完美解决。
如果仍要使用正则表达式,可以使用此正则表达式:
将匹配以下组:
- 第1组:
“宽度”
- 第二组:
“10”
- 第三组:
“高度”
- 第四组:
“111”
在文本中:
它将匹配:
- 第一组:
“高度”
- 第二组:
“111”
- 第三组:
“宽度”
- 第四组:
“10”
现在,无论width
是在height
之前,还是在height
之前,它都是匹配的,我认为这4组在进行替换时为您提供了足够的信息
编辑:
我捕获了组height
和width
,以便您知道哪个值首先匹配(否则,如果您获得111
和10
,您将不知道哪个值是height
和width
),但我认为这在您的情况下不是必需的,因为您所要做的就是复制两个值,但在您需要在di中增加高度和宽度的情况下可能会很有用
>>> from BeautifulSoup import BeautifulSoup
>>> ht = '<html><head><title>foo</title></head><body><p>whatever: <img src="foo/img.png" height="111" width="22" /></p><ul><li><img src="foo/img2.png" height="32" width="44" /></li></ul></body></html>'
>>> soup = BeautifulSoup(ht)
>>> soup
<html><head><title>foo</title></head><body><p>whatever: <img src="foo/img.png" height="111" width="22" /></p><ul><li><img src="foo/img2.png" height="32" width="44" /></li></ul></body></html>
>>> soup.findAll('img')
[<img src="foo/img.png" height="111" width="22" />, <img src="foo/img2.png" height="32" width="44" />]
>>> for img in soup.findAll('img'):
... ht = int(img['height'])
... wi = int(img['width'])
... img['height'] = str(ht * 2)
... img['width'] = str(wi * 2)
...
...
>>> print soup.prettify()
<html>
<head>
<title>
foo
</title>
</head>
<body>
<p>
whatever:
<img src="foo/img.png" height="222" width="44" />
</p>
<ul>
<li>
<img src="foo/img2.png" height="64" width="88" />
</li>
</ul>
</body>
</html>
>>>
import lxml.html
html = '<img src = "werwerwe" height="111" width="10" />'
etree = lxml.html.fromstring(html)
images = etree.xpath('//img')
for image in images:
h = int(image.attrib['height'])
w = int(image.attrib['width'])
image.attrib['height'] = str(h*2)
image.attrib['width'] = str(w*2)
print lxml.html.tostring(etree)