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

时间:2015-08-07 08:42:45

标签: python for-loop iteration substring

我想知道是否有方法,在迭代带有for循环的字符串时,删除字符串的一部分并用它做其他事情。

基本上,我想从一个字符串开始"第一部分|中间|,结束"并以两个字符串结尾。 "缓冲区"变量应包含"第一部分,结束"第二个字符串应包含" | 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语句,它将删除管道之间的任何内容并保存它。如果这不可能,我会重写程序,让我也这样做。

4 个答案:

答案 0 :(得分:1)

您在寻找str.split()功能吗?

您可以将PIPE字符传递给它,它会在找到|的位置拆分字符串,并返回拆分字符串列表。示例 -

>>> 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'

答案 1 :(得分:0)

如果您确定for (i = 0; i < locations.length; i++) { loc_array = locations[i].split(","); marker = new google.maps.Marker({ position: new google.maps.LatLng(loc_array[1], loc_array[2]), map: map }); google.maps.event.addListener(marker, 'click', (function(marker, i) { return function() { infowindow.setContent(loc_array[0]); infowindow.open(map, marker); } })(marker, i)); } 形式的字符串可以使用"str1|str2|str3"

split

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

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

regexp (.*)(\|.*\|)(.*)将捕获两个管道之间和文本之前和之后包含的任何文本((.*)捕获任何包含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等网站上在线测试正则表达式,但我建议您将其用于您知道结构的文字