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= 的文本]
我想知道是否有办法在使用 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= 的文本]