【发布时间】:2016-12-16 02:46:15
【问题描述】:
我正在尝试使用正则表达式来捕获推文正文中的所有 Twitter 句柄。挑战在于我正在尝试处理这些
- 包含特定字符串
- 长度未知
- 之后可以是
- 标点符号
- 空格
- 或字符串的结尾。
例如,对于这些字符串中的每一个,我已用斜体字标记了我想要返回的内容。
“@handle 你有什么问题?” [RETURN '@handle']
“你有什么问题@handle?” [RETURN '@handle']
“@123handle 你有什么问题@handle123?” [返回 '@123handle', '@handle123']
这是我目前所拥有的:
>>> import re
>>> re.findall(r'(@.*handle.*?)\W','hi @123handle, hello @handle123')
['@123handle']
# This misses the handles that are followed by end-of-string
我尝试修改以包含一个允许字符串结尾字符的or 字符。相反,它只返回整个字符串。
>>> re.findall(r'(@.*handle.*?)(?=\W|$)','hi @123handle, hello @handle123')
['@123handle, hello @handle123']
# This looks like it is too greedy and ends up returning too much
如何编写同时满足这两个条件的表达式?
【问题讨论】:
-
您不应该在
@和handle之间添加.*。使用\w*。喜欢r'@\w*handle\w*'