Python - 有一个具有相同变量的子 for 循环

Python - Having a sub for loop with the same variable

我想知道是否有办法在使用 for 循环遍历字符串时删除字符串的一部分并用它做其他事情。

基本上,我想以一个字符串开始 "first portion|middle|,end" 并以两个字符串结束。 "buffer" 变量应包含 "first portion,end",第二个字符串应包含“|middle|”

word = "first portion|middle|,end"
buffer = ''

for i in word:
    if i == '|':
        # Loop in here until another pipeline is found while saving each character
    else:
        buffer += i 

我已经有一个程序可以解析原始字符串并组织它,所以理想情况下我只想在 for 循环中有一个 if 语句,它将删除管道之间的任何内容并保存它。如果这不可能,我将重写程序以允许我也这样做。

您在寻找 str.split() 函数吗?

您可以将 PIPE 字符传递给它,它会在找到 | 和 return 的位置拆分字符串。示例 -

>>> word = "first portion|middle|,end"
>>> word.split('|')
['first portion', 'middle', ',end']

然后,如果您确定总是只有三个元素,则取第一个和第三个元素,并将它们连接起来作为您想要的第一个字符串结果,然后使用第二个元素作为第二个结果。示例 -

>>> word = "first portion|middle|,end"
>>> l = word.split('|')
>>> result1 = l[0] + l[2]
>>> result2 = l[1]
>>> result1
'first portion,end'
>>> result2
'middle'

如果你确定你的字符串是"str1|str2|str3"的形式你可以使用split

>>> l = "first portion|middle|,end".split('|')
>>> l[0]+l[-1]
'first portion,end'
>>> l[1]
'middle'

这不是很优化,但可以解决问题。

import re
middle = re.findall('\|[a-zA-Z]+\|', s)[0]
other = re.split('\|[a-zA-Z]+\|', s)

如果字符串结构始终相同,您可以使用正则表达式。

正则表达式 (.*)(\|.*\|)(.*) 将捕获两个管道之间包含的任何文本及其前后的文本((.*) 捕获包含 0 个或更多字符的任何文本字符串)。

>>> import re
>>> p = re.compile(ur'(.*)(\|.*\|)(.*)')
>>> test_str = u"first portion|middle|,end"
>>> strings = p.match(test_str).groups()

这里strings会有你想要的部分:

>>> strings
(u'first portion', u'|middle|', u',end')
>>> buffer = strings[0] + strings[2]
>>> second = strings[1]

>>> buffer
u'first portion,end'
>>> second
u'|middle|'

您可以在 regex101 等网站上在线测试正则表达式,但我建议将它们用于 您知道其结构.[=16= 的文本]