有人可以帮助我提取每个id的推文使用regex在Python作为一个列表


string = 'ID::ID123
PUBLISHED_TWEET::ABC
DEF
GHI
EMPLOYEE_ID::ID234
TWEET::ABC
DEF
GHI
ID::ID345
TWEET::#@ABC
DEF
GHI@.[]
USER_IDD::ID456
TWEET::google.com
123456789'

需要输出

id = ['ID123', 'ID234', 'ID345', 'ID456'] -我得到了这个输出

正在处理tweet文本。我需要使用regex python提取tweet文本。

tweet-output = ['ABC
DEF
GHI', 
'ABC
DEF
GHI', 
'#@ABC
DEF
GHI@.[]', 
'google.com
123456789']

我尝试使用正则表达式得到

# pattern_01 = r'PUBLISHED_TWEET::(.*)EMPLOYEE_ID::'
# pattern_02 = r'PUBLISHED_TWEET::(.*)ID::'
# pattern_03 = r'PUBLISHED_TWEET::(.*)USER_IDD::'
# pattern_04 = r'TWEET::(.*)EMPLOYEE_ID::'
# pattern_05 = r'TWEET::(.*)ID::'
# pattern_06 = r'TWEET::(.*)USER_IDD::
# if(re.findall(pattern = pattern_01, string = str(data))):
#   new_tweet_list.append(re.findall(pattern = pattern_01, string = str(data)))
# elif(re.findall(pattern = pattern_02, string = str(data))):
#   new_tweet_list.append(re.findall(pattern = pattern_02, string = str(data)))
# elif(re.findall(pattern = pattern_03, string = str(data))):
#   new_tweet_list.append(re.findall(pattern = pattern_03, string = str(data)))
# elif(re.findall(pattern = pattern_04, string = str(data))):
#   new_tweet_list.append(re.findall(pattern = pattern_04, string = str(data)))
# elif(re.findall(pattern = pattern_05, string = str(data))):
#   new_tweet_list.append(re.findall(pattern = pattern_05, string = str(data)))
# elif(re.findall(pattern = pattern_06, string = str(data))):
#   new_tweet_list.append(re.findall(pattern = pattern_06, string = str(data)))

但是我没有得到任何输出。字符串为空或者给出传递的整个字符串。

看起来您的匹配对象是<id,>,其匹配文本用双冒号::与识别关键字分开。

您可以使用下面的正则表达式来检索任何以双冒号开头,后跟一个空格的字符串,而不需要延迟匹配。

(?<=::)[^:]+(?=n|$)

可以在python中使用如下代码:

import re
pattern = '(?<=::)[^:]+(?=n|$)'
pairs = re.findall(pattern, string)
tweets = {pairs[i]: pairs[i+1] for i in range(0, len(pairs), 2)}

查看此处的正则表达式演示和此处的python演示。

你的问题不清楚。很难理解你真正想要的是什么,但我会试着猜一猜。

我相信在这种情况下,你应该分割字符串,而不是尝试搜索模式。这就容易多了。

使用

pattern = r'([A-Z_]+)::'
split_string = re.split(pattern, string)

基本上,它将把字符串分成由大写字母a到z和下划线后跟双冒号组成的每一部分。

在本例中,输出将是

['',
'ID',
'ID123n',
'PUBLISHED_TWEET',
'ABCnDEFnGHIn',
'EMPLOYEE_ID',
'ID234n',
'TWEET',
'ABCnDEFnGHIn',
'ID',
'ID345n',
'TWEET',
'#@ABCnDEFnGHI@.[]n',
'USER_IDD',
'ID456n',
'TWEET',
'google.comn123456789']

这里我们将所有的标签和值分开。列表的第一项是空字符串,因为第一行被分割了。我们必须忽略它。我们还可以看到所有的值都以'n'结尾。我们会改正这些错误的。

让我们将每个标签与其各自的值配对。通过这种方式,我相信您将能够随心所欲地使用这些值。

我将把标签从值中分离出来,并将它们压缩在一起。

labels = split_string[1::2]
values = map(lambda x: x.rstrip('n'), split_string[2::2])
output = zip(labels, values)

您可以将输出用作生成器,也可以将其保留为可迭代对象,执行以下操作:

output = tuple(output)

在这种情况下,输出将是

(('ID', 'ID123'),
('PUBLISHED_TWEET', 'ABCnDEFnGHI'),
('EMPLOYEE_ID', 'ID234'),
('TWEET', 'ABCnDEFnGHI'),
('ID', 'ID345'),
('TWEET', '#@ABCnDEFnGHI@.[]'),
('USER_IDD', 'ID456'),
('TWEET', 'google.comn123456789'))

你可以在这里查看python演示。

最新更新