使用Regexp捕获子串python

时间:2017-09-14 12:09:47

标签: python regex

我们假设我有一些这样的字符串:

:heavy_black_heart:
:smiling_face:

所以,我想从中得到:

import re
result = re.search(':(.*?):', x)
result.group()

为此,我做了以下事情:

':heavy_black_heart:'

它只给了我con.setRequestMethod("POST"); con.getRequestMethod(); con.setDoOutput(true); 。我怎么能让它工作?如果可能的话,我想在找到所有这些之后将它们存储在dictonary中。

5 个答案:

答案 0 :(得分:3)

print re.findall(':.*?:', x)正在做这项工作。

输出:
[':heavy_black_heart:',':heavy_black_heart:',':smiling_face:']

但是如果你想删除重复项:

使用:

res = re.findall(':.*?:', x)
dictt = {x for x in res}
print list(dictt)

输出:
[':heavy_black_heart:',':smiling_face:']

答案 1 :(得分:2)

您似乎希望匹配2 :之间某些符号的表情符号。 .*?可以匹配0个符号,并且您的正则表达式可以匹配::,我认为这不是您想要的。 Besdies,re.search只返回一个 - 第一个匹配,为了获得多个匹配,您通常会使用re.findallre.finditer

我认为你需要

set(re.findall(r':[^:]+:', x))

或者如果您只需要匹配:...:内的字词:

set(re.findall(r':\w+:', x))

或 - 如果你想匹配两个:之间的任何非空白字符:

set(re.findall(r':[^\s:]+:', x))

re.findall会找到所有不重叠的事件,而set会删除欺骗。

模式将匹配:,然后是:[^:]+)以外的1 +个字符(或1个或多个字母,数字和_)并再次{{ 1}}。

:

答案 2 :(得分:0)

试试这个正则表达式:

:([a-z0-9:A-Z_]+):

答案 3 :(得分:0)

import re
x = 'Wish she could have told me herself. @NicoleScherzy #nicolescherzinger #OneLove #myfav #MyQueen :heavy_black_heart::heavy_black_heart: some string too :smiling_face:' 
print set(re.findall(':.*?:', x))

输出:

{':heavy_black_heart:', ':smiling_face:'}

答案 4 :(得分:0)

只是为了好玩,这是一个没有正则表达式的简单解决方案。它在':'左右分裂并保留具有奇数索引的元素:

>>> text = 'Wish she could have told me herself. @NicoleScherzy #nicolescherzinger #OneLove #myfav #MyQueen :heavy_black_heart::heavy_black_heart: some string too :smiling_face:'
>>> text.split(':')[1::2]
['heavy_black_heart', 'heavy_black_heart', 'smiling_face']
>>> set(text.split(':')[1::2])
set(['heavy_black_heart', 'smiling_face'])