在python中将长字符串中的子字符串切片到列表中

2024-09-26 18:13:20 发布

您现在位置:Python中文网/ 问答频道 /正文

在python中,我有长字符串(其中我去掉了所有的中断)

stringA = 'abcdefkey:12/eas9ghijklkey:43/e3mnop'

我要做的是在这个字符串中搜索所有出现的"key:",然后提取"key:"后面的“值”。 对我来说,一个更复杂的问题是,我不知道这些属于key的值有多长(例如key:12/eas9key:43/e3)。我只知道它们必须以数字结尾,而字符串的其余部分不包含任何数字。你知道吗

这就是为什么我的想法是从key的索引加上接下来的10个字符(例如key:12/eas9g)进行切片,然后向后操作直到isdigit()为假。你知道吗

我尝试拆分我的初始字符串(确实包含中断):

stringA_split = re.split("\n", stringA)

for linex in stringA_split:
  index_start = linex.rfind("key:")
  index_end = index_start + 8
  print(linex[index_start:index_end]
  #then work backward

但是,插入换行符并没有任何帮助,因为从pdf到txt转换,换行符毫无意义。你知道吗

然后我该如何解决这个问题(例如,首先获取“key:”的所有索引,并将其切片到一个列表中)?你知道吗


Tags: key字符串index切片数字startendsplit
3条回答

您可以只应用一个RE,将所有键放入一个元组数组中:

import re
p=re.compile('key\:(\d+)\/([^\d]+\d)')
ret=p.findall(stringA)

执行后,您有:

ret 
[('12', 'eas9'), ('43', 'e3')]

我不能100%肯定我理解你对价值的定义,但我想这会让你明白你所描述的

import re
stringA = 'abcdefkey:12/eas9ghijklkey:43/e3mnop'
for v in stringA.split('key:'):
    ma = re.match(r'(\d+\/.*\d+)', v)
    if ma:
        print ma.group(1)

这将返回:

12/eas9
43/e3
import re

>>> re.findall('key:(\d+[^\d]+[\d])', stringA)
['12/eas9', '43/e3']

\d+#一个或多个数字。你知道吗

[^\d]+#除数字以外的所有内容(相当于[\D])。你知道吗

[\d]#最后一位

(\d+[^\d]+[\d])#以上表达式的组

'key:(\d+[^\d]+[\d])'#'key:'后跟组表达式

如果要在结果中key:

>>> re.findall('(key:\d+[^\d]+[\d])', stringA)
['key:12/eas9', 'key:43/e3']

相关问题 更多 >

    热门问题