社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

在字符串python中提取特定关键字后的列表

rahul • 6 年前 • 1582 次点击  

我有绳子

my_string = "K1:s1,\ns2,\ns3,\n\nK2:g1,\ng2,\ng3,\nK3:m1,\nm2,\nm3"

简化视图 my_string :

"K1:s1,
 s2,
 s3,

 K2:g1,
 g2,
 g3,    
 K3:m1,
 m2,
 m3"

我需要查找关键字k1:,k2:,k3:并提取列表中另一个关键字前后的所有内容。 例如:

List1 = [s1, s2, s3]
List2 = [g1, g2, g3]
List3 = [m1, m2, m3]

字符串中关键字的顺序不是固定的。k1:可以在k2:和k3:之后出现,反之亦然。换行符'\n'的数目也不是固定的。

有什么简单的regex方法来解决这个问题吗?

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/40165
 
1582 次点击  
文章 [ 3 ]  |  最新文章 6 年前
kcorlidy
Reply   •   1 楼
kcorlidy    6 年前

我考虑是否可以提取包含空格或其他内容的值(除了 \n , : )

  1. [kK]\d+.(.*?)(?=.[kK]\d+|$)
    • [kK]\d+. 字符串以开头 k1: K1: k23:
    • (.*?) 所有比赛
    • (?=.[kK]\d+|$) 字符串以整个字符串结尾或 K1 k1
  2. [^,]+ 拆分字符串

全码

import re

my_string = "K1:s1,\ns: face2,\ns3,\n\nK2:g1,\ng2,\ng3,\nK3:m1,\nm2,\nm3"
my_string = my_string.replace("\n","") # remove \n

string_list = re.findall(r"[kK]\d+.(.*?)(?=.[kK]\d+|$)",my_string,re.DOTALL)
group = [ re.findall(r"[^,]+",ele) for ele in string_list]
print(group)

# [['s1', 's: face2', 's3'], ['g1', 'g2', 'g3'], ['m1', 'm2', 'm3']]
Vasilis G.
Reply   •   2 楼
Vasilis G.    6 年前

您不必使用regex来实现这一点。您只需要根据 K 价值观:

my_string = "K1:s1,\ns2,\ns3,\n\nK2:g1,\ng2,\ng3,\nK3:m1,\nm2,\nm3"
# Reformat and sort results.
my_string = sorted("".join(my_string.split()).replace(",K","\nK").split('\n'), key=lambda elem: int(elem[1]))
# Get results.
resultList = [elem[3:].split(',') for elem in my_string]
# Print results.
print(resultList)

输出:

[['s1', 's2', 's3'], ['g1', 'g2', 'g3'], ['m1', 'm2', 'm3']]
Erika Dsouza
Reply   •   3 楼
Erika Dsouza    6 年前

最简单的方法是使用regex并在单词上进行拆分。

result = []
for word in re.split('\W+', my_string):
    if word.startswith('K'):
        if result:
            print result
        result = []
    else:
        result.append(word)

if result:
    print(result)