所以我有一个我需要解析的字符串。该字符串包含多个单词,用连字符(-
)分隔。该字符串也以连字符结尾。
例如one-two-three-
。
现在,如果我想自己查看单词,我会将字符串拆分为列表。
wordstring = "one-two-three-"
wordlist = wordstring.split('-')
for i in range(0, len(wordlist)):
print(wordlist[i])
输出
one
two
three
#empty element
我不明白的是,为什么在结果列表中,最后一个元素是一个空字符串。 如何省略这个空元素?
我应该简单地截断列表还是有更好的方法来分割字符串?
答案 0 :(得分:4)
您有一个空字符串,因为最后一个-
字符上的拆分在RHS上产生一个空字符串。在拆分之前,您可以从字符串中删除所有'-'
个字符:
wordlist = wordstring.strip('-').split('-')
答案 1 :(得分:2)
如果最后一个元素总是一个-
字符,你可以使用[:-1]
来省略它,它除了最后一个字符之外还会抓取字符串的所有元素。
然后,像你一样继续split
:
wordlist = wordstring[:-1].split('-')
print(wordlist)
['one', 'two', 'three']
答案 2 :(得分:2)
您可以使用正则表达式执行此操作:
import re
wordlist = re.findall("[a-zA-Z]+(?=-)", wordstring)
输出:
['one', 'two', 'three']
答案 3 :(得分:1)
在拆分String之前,您应该使用Python的strip内置函数。 E.g:
wordstring = "one-two-three-"
wordlist = wordstring.strip('-').split('-')
答案 4 :(得分:1)
我相信.split()
假设在最后-
之后还有另一个元素,但它显然是一个空白条目。
您是否愿意在分割之前删除wordstring
中的短划线?
wordstring = "one-two-three-"
wordlist = wordstring[:-1].split('-')
print wordlist
OUT: 'one-two-three'
答案 5 :(得分:1)
the docs中解释了这一点:
... 如果给出了sep,则连续的分隔符不会组合在一起,并被视为分隔空字符串(例如,
'1,,2'.split(',')
返回['1', '', '2']
)。 ...
如果您知道自己的字符串将始终以'-'
结尾,那么只需执行wordlist.pop()
即可删除最后一个字符串。
如果您需要更复杂的内容,可能需要了解regular expressions。
答案 6 :(得分:1)
仅适用于各种选项:
genrule(
name = 'foo',
outs = ['foo.cpp'],
cmd = 'python gencpp.py',
)
cc_library(
srcs = ['foo.cpp'], # tried also with :foo
...
)
请注意,上述内容还会处理以下情况:gencpp.py
(双连字符)
答案 7 :(得分:1)
第一个strip()然后split()
wordstring = "one-two-three-"
x = wordstring.strip('-')
y = x.split('-')
for word in y:
print word
答案 8 :(得分:-1)
在拆分之前剥离/修剪字符串。通过这种方式,您将删除尾随" \ n"你会没事的。