我们假设我有一些这样的字符串:
: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中。
答案 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.findall
或re.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'])