Python 正则表达式分组字符串是否存在

Python 正则表达式分组字符串是否存在,python,regex,Python,Regex,我有一组字符串,如下所示: Bought MSFT@Arca ABCD Bought Yahoo@Nasdaq Sold Google@Nasdaq ABCD 我想为所有字符串创建ABCD的数据帧 因此,所需的数据帧应该是这样的: ACBD NaN ABCD 如何首先使用正则表达式解析字符串?我尝试了(ABCD |),但返回为空。作为一个完整的代码片段: import pandas as pd, numpy as np string = """Bought MSFT@Arca ABCD

我有一组字符串,如下所示:

Bought MSFT@Arca ABCD
Bought Yahoo@Nasdaq 
Sold Google@Nasdaq ABCD
我想为所有字符串创建ABCD的数据帧

因此,所需的数据帧应该是这样的:

ACBD
NaN
ABCD
如何首先使用正则表达式解析字符串?我尝试了
(ABCD |)
,但返回为空。

作为一个完整的代码片段:

import pandas as pd, numpy as np

string = """Bought MSFT@Arca ABCD
Bought Yahoo@Nasdaq 
Sold Google@Nasdaq ABCD"""

needle = 'ABCD'

def search(line):
    return needle if line.endswith(needle) else np.nan

df = pd.DataFrame((search(line) for line in string.split("\n")))

print(df)
这利用了
.endswith()
、函数
search()
和列表理解,并将生成

      0
0  ABCD
1   NaN
2  ABCD
使用lambda函数甚至更短:

df = pd.DataFrame(map(lambda x: needle if x.endswith(needle) else np.nan, string.split("\n")))
print(df)

对于更个性化的解决方案,您需要详细说明实际的输入字符串。

您已经尝试了哪些?如果您想使用正则表达式,是否检查了python的re文档?您可以使用
split
,然后使用最后一个元素
@\w+[\t]+(\w+)?
。如果没有捕获组,您知道它是
NaN
,那么最好取字符串的最后4个字符并检查它是否是
==“ABCD”