首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >正则表达式(Python)从<和>的内部提取文本字符串,例如<string and ><string-2>等

正则表达式(Python)从<和>的内部提取文本字符串,例如<string and ><string-2>等
EN

Stack Overflow用户
提问于 2010-09-14 11:30:51
回答 3查看 1.4K关注 0票数 1

我目前正在处理堆栈溢出数据转储,并试图构造一个简单的正则表达式,从<>字符中提取标记名。因此,对于每个问题,我都有一个或多个标签的列表,比如<tagone><tag-two>...<tag-n>,并试图只提取一个标签名的列表。下面是从数据转储中获取的几个示例标记字符串:

代码语言:javascript
复制
<javascript><internet-explorer>

<c#><windows><best-practices><winforms><windows-services>

<c><algorithm><sorting><word>

<java>

作为参考,我不需要将标记名划分为单词,因此,对于<best-practices>这样的例子,我想返回best-practices (而不是bestpractices)。此外,不管它有什么价值,如果它有任何不同,我都会使用Python。有什么建议吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-09-14 11:34:28

由于Stackoverflow的标记名没有嵌入的< >,所以可以使用regex:

代码语言:javascript
复制
<(.*?)>

代码语言:javascript
复制
<([^>]*)>

解释:

  • <:文字<
  • (..):对match.
  • .*?进行分组和记忆:以匹配非贪婪的way.
  • >中的任何内容:文字<
  • [^>]:char类与>

以外的任何内容匹配。

票数 3
EN

Stack Overflow用户

发布于 2010-09-14 12:11:20

与其做数据转储(不管它们是什么)和使用regex,您可能对使用Stackoverflow API和json感兴趣。

例如,要从这个问题中选择标记,可以这样做:

代码语言:javascript
复制
import urllib2
import json
import gzip
import cStringIO

f=urllib2.urlopen('http://api.stackoverflow.com/1.0/questions/3708418?type=jsontext')
g=gzip.GzipFile(fileobj=cStringIO.StringIO(f.read()))
j=json.loads(g.read())

print(j['questions'][0]['tags'])
# [u'python', u'regex']
票数 3
EN

Stack Overflow用户

发布于 2010-09-14 11:35:06

下面是一个快速而肮脏的解决方案:

代码语言:javascript
复制
#!/usr/bin/python

import re
pattern = re.compile("<(.*?)>")
data = """
<javascript><internet-explorer>

<c#><windows><best-practices><winforms><windows-services>

<c><algorithm><sorting><word>

<java>
"""

for each in pattern.findall(data):
    print each

更新

法定警告:如果数据转储使用的是XML或JSON (正如其中一位用户所评论的),那么您最好使用合适的XML或JSON解析器。

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

https://stackoverflow.com/questions/3708418

复制
相关文章

相似问题

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