[英]How to match string using pattern and return custom output
我正在尝试使用下面代码中的正则表达式模式匹配列中的字符串。
import pandas as pd
data = {'col1': ['aa', 'aabc', '111aabc222']}
df = pd.DataFrame(data)
print(df)
pat_data = {'name': ['aa', '111(.*?)222']}
df_p = pd.DataFrame(pat_data)
print(df_p)
pat = "|".join(map(str,df_p['name']))
print(pat)
# This one works fine
df['col1'].str.extract('(' + pat + ')', expand=False)
输出:
0 | 1 |
---|---|
0 | 啊 |
1 | 啊 |
2 | 111aabc222 |
预期输出:
我只需要正则表达式中使用的开始和结束字符串的组合作为输出。 我怎样才能修改我的代码来做到这一点?
0 | 1 |
---|---|
0 | 啊 |
1 | 啊 |
2 | 111 - 222 |
你想要的并不完全清楚,我的理解是你想要匹配字符串的子部分。 然后直接在初始子模式中设置捕获组并对输出进行后处理:
pat_data = {'name': ['(aa)', '(111).*?(222)']}
# ...
df['out'] = (df['col1'].str.extract(pat, expand=False)
.stack().groupby(level=0).agg(' - '.join)
)
输出:
col1 out
0 aa aa
1 aabc aa
2 111aabc222 111 - 222
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.