首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将_sre.SRE_Match类型转换为字符串和整数

如何将_sre.SRE_Match类型转换为字符串和整数
EN

Stack Overflow用户
提问于 2017-03-05 13:18:22
回答 2查看 6.4K关注 0票数 1

我正在尝试用Python解析正则表达式,并将解析后的字符串的值赋给2个变量。

例如,如果我有一个字符串

代码语言:javascript
复制
<tr align="right"><td>1</td><td>Michael</td><td>Jessica</td>

我想将值1赋给一个名为rank的整数变量,将Jessica赋值给一个名为valuesMichael的数组。

当我使用re.search()解析并使用.group()函数赋值时,赋值的变量类型是_sre.SRE_Match。你能帮我把它分别转换成整数和字符串格式吗?

EN

回答 2

Stack Overflow用户

发布于 2017-03-05 13:30:32

下面这行代码:

代码语言:javascript
复制
rank = re.search('(\d)+', line)

应替换为:

代码语言:javascript
复制
rank = re.search(r'\d+', line).group()   # (..) is not needed

来获取字符串。

如果需要int对象,请使用int

代码语言:javascript
复制
rank = int(re.search(r'\d+', line).group())

顺便说一句,使用re.findall可以简化你的程序。

代码语言:javascript
复制
import re

def extract_rankname(line):
    groups = re.findall('<td>(.*?)</td>', line)
    try:
        rank = groups[0]   # int(groups[0])
        return {rank: groups[1:]}
    except ValueError:
        return {}  # return None

extract_rankname('<tr align="right"><td>1</td><td>Michael</td><td>Jessica</td>')
# => {'1': ['Michael', 'Jessica']}

或者,在解析HTML时,最好使用BeatufiulSoup、lxml等库,而不是使用正则表达式。

代码语言:javascript
复制
>>> from bs4 import BeautifulSoup
>>> soup = BeautifulSoup('<tr align="right"><td>1</td><td>Michael</td><td>Jessica</td>', 'lxml')
>>> [td.text for td in soup.find_all('td')]
[u'1', u'Michael', u'Jessica']
>>> tds = [td.text for td in soup.find_all('td')]
>>> tds[0], tds[1:]
(u'1', [u'Michael', u'Jessica'])
>>> print(tds[0])  # rank
1
>>> tds[1:]  # names
[u'Michael', u'Jessica']
票数 3
EN

Stack Overflow用户

发布于 2017-03-05 13:24:09

您可以尝试这样做:

代码语言:javascript
复制
<td>(\w+)<\/td>

Demo

然后遍历匹配并将其分配给数组或变量...

示例代码(Run it here):

代码语言:javascript
复制
import re    
regex = r"<td>(\w+)<\/td>"    
test_str = "<tr align=\"right\"><td>1</td><td>Michael</td><td>Jessica</td>"
values=[]   
matches = re.finditer(regex, test_str)    
for match in matches:
  if match.group(1).isdigit():
    rank = int(match.group(1))
  else:
    values.append(match.group(1))

print(rank)
print(values)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42604800

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档