首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python regex findall

Python regex findall
EN

Stack Overflow用户
提问于 2011-10-13 18:10:58
回答 5查看 188.5K关注 0票数 48

我正在尝试使用Python 2.7.2中的regex从字符串中提取所有出现的标记单词。或者简单地说,我想提取[p][/p]标记中的每一段文本。这是我的尝试:

代码语言:javascript
复制
regex = ur"[\u005B1P\u005D.+?\u005B\u002FP\u005D]+?"
line = "President [P] Barack Obama [/P] met Microsoft founder [P] Bill Gates [/P], yesterday."
person = re.findall(pattern, line)

打印person生成['President [P]', '[/P]', '[P] Bill Gates [/P]']

正确的正则表达式是:['[P] Barack Obama [/P]', '[P] Bill Gates [/p]']还是['Barrack Obama', 'Bill Gates']

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-10-13 18:20:25

代码语言:javascript
复制
import re
regex = ur"\[P\] (.+?) \[/P\]+?"
line = "President [P] Barack Obama [/P] met Microsoft founder [P] Bill Gates [/P], yesterday."
person = re.findall(regex, line)
print(person)

收益率

代码语言:javascript
复制
['Barack Obama', 'Bill Gates']

正则表达式ur"[\u005B1P\u005D.+?\u005B\u002FP\u005D]+?"u'[[1P].+?[/P]]+?'完全相同,只是更难读。

第一个带括号的组[[1P]告诉re列表['[', '1', 'P']中的任何字符都应该匹配,第二个带括号的组[/P]]也是如此,这根本不是您想要的。所以,

  • 去掉外部的方括号。(还要删除P.)
  • To前面的杂乱无章的括号保护[P]中的文字括号,用反斜杠转义括号:\[P\].
  • To只返回标签内的单词,将.+?.

放在分组括号中

票数 73
EN

Stack Overflow用户

发布于 2011-10-13 18:21:12

试试这个:

代码语言:javascript
复制
   for match in re.finditer(r"\[P[^\]]*\](.*?)\[/P\]", subject):
        # match start: match.start()
        # match end (exclusive): match.end()
        # matched text: match.group()
票数 16
EN

Stack Overflow用户

发布于 2011-10-13 18:24:23

您的问题不是100%清楚,但我假设您想要找到[P][/P]标记中的每一段文本:

代码语言:javascript
复制
>>> import re
>>> line = "President [P] Barack Obama [/P] met Microsoft founder [P] Bill Gates [/P], yesterday."
>>> re.findall('\[P\]\s?(.+?)\s?\[\/P\]', line)
['Barack Obama', 'Bill Gates']
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7752551

复制
相关文章

相似问题

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