我想知道是否有方法,在迭代带有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语句,它将删除管道之间的任何内容并保存它。如果这不可能,我会重写程序,让我也这样做。
答案 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等网站上在线测试正则表达式,但我建议您将其用于您知道结构的文字。