Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中,将长字符串中的子字符串切片到列表中_Python_Regex - Fatal编程技术网

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

在python中,将长字符串中的子字符串切片到列表中,python,regex,Python,Regex,在python中,我使用了长字符串(我删除了其中的所有中断) 我要做的是在这个字符串中搜索所有出现的键:,然后提取键:后面的“值”。 对我来说,另一个复杂的问题是,我不知道属于键的这些值有多长(例如key:12/eas9和key:43/e3)。我只知道它们必须以数字结尾,而字符串的其余部分不包含任何数字 这就是为什么我的想法是从key的索引中再加上接下来的10个字符(例如key:12/eas9g),然后反向工作,直到isdigit()为false 我尝试拆分我的初始字符串(确实包含中断): 但是

在python中,我使用了长字符串(我删除了其中的所有中断)

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

这就是为什么我的想法是从
key
的索引中再加上接下来的10个字符(例如
key:12/eas9g
),然后反向工作,直到
isdigit()
为false

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

但是,插入换行符在任何方面都没有帮助,因为从pdf到txt的转换中,换行符毫无意义


然后我该如何解决这个问题(例如,从获取“key:”的所有索引开始,并将其切片到一个列表)?

我不能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

我不能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

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

import re
p=re.compile('key\:(\d+)\/([^\d]+\d)')
ret=p.findall(stringA)
执行后,您有:

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

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

import re
p=re.compile('key\:(\d+)\/([^\d]+\d)')
ret=p.findall(stringA)
执行后,您有:

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

编辑:上面贴了一个更好的答案。当我在这里提议倒转时,我误读了原来的问题,这真的没有必要。祝你好运

如果知道格式始终为key:,那么如果将字符串和rex颠倒为:yes会怎么样?您可以隔离所有密钥,然后将它们反转回来

import re
# \w is alphanumeric, you may want to add some symbols
rex = re.compile("\w*:yek")

word = 'abcdefkey:12/eas9ghijklkey:43/e3mnop'
matches = re.findall(rex, word[::-1])
matches = [match[::-1] for match in matches]

编辑:上面贴了一个更好的答案。当我在这里提议倒转时,我误读了原来的问题,这真的没有必要。祝你好运

如果知道格式始终为key:,那么如果将字符串和rex颠倒为:yes会怎么样?您可以隔离所有密钥,然后将它们反转回来

import re
# \w is alphanumeric, you may want to add some symbols
rex = re.compile("\w*:yek")

word = 'abcdefkey:12/eas9ghijklkey:43/e3mnop'
matches = re.findall(rex, word[::-1])
matches = [match[::-1] for match in matches]
\d+
#一个或多个数字

[^\d]+
#除数字以外的所有内容(相当于
[\d]

[\d]
#最后一位数字

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

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

如果要在结果中输入
键:

>>> re.findall('(key:\d+[^\d]+[\d])', stringA)
['key:12/eas9', 'key:43/e3']
\d+
#一个或多个数字

[^\d]+
#除数字以外的所有内容(相当于
[\d]

[\d]
#最后一位数字

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

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

如果要在结果中输入
键:

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