在字符的第一次出现和最后一次出现时拆分?

时间:2020-02-10 19:01:55

标签: python

我有一个这样的字符串列表(金额,地址,付款):

"44.53 54 orchard rd Cash"
"32.34 600 sprout brook lane Card"

我只是想从每个字符串中获取地址。在我看来,执行此操作的最佳方法是在空间的第一个和最后一个出现时进行拆分。有什么办法吗?

5 个答案:

答案 0 :(得分:2)

Python split函数的定义如下:str.split(sep=None, maxsplit=-1)

类似地,有str.rsplit(sep=None, maxsplit=-1)

这意味着您可以仅分割开头和结尾:

>>> s = "44.53 54 orchard rd Cash"
>>> s.split(maxsplit=1)
['44.53', '54 orchard rd Cash']
>>> s.rsplit(maxsplit=1)
['44.53 54 orchard rd', 'Cash']

然后,只需将字符串分成3个即可,您可以编写一个简单的函数:

>>> def purchase_parts(purchase):
...     lsplit = purchase.split(maxsplit=1)
...     rsplit = lsplit[1].rsplit(maxsplit=1)
...     return (lsplit[0], rsplit[0], rsplit[1])
... 
>>> purchase_parts("44.53 54 orchard rd Cash")
('44.53', '54 orchard rd', 'Cash')
>>> purchase_parts("32.34 600 sprout brook lane Card")
('32.34', '600 sprout brook lane', 'Card')

还是,我建议切换到分隔值列表,因为这样您就可以使用该分隔符进行分隔,而且还直接支持csv格式(逗号分隔值)文件的导入/导出。

手动解决方案:

>>> [p.strip() for p in "32.34, 600 sprout brook lane, Card".split(',')]
['32.34', '600 sprout brook lane', 'Card']

答案 1 :(得分:0)

您可能会做类似的事情:

line = "44.53 54 orchard rd Cash"
line_parts = line.split(" ")
address = " ".join(line_parts[1:-1])

行格式的更改有点不整洁,而且确实很脆弱,但是可以完成工作。

答案 2 :(得分:0)

您可以使用您的方法,在第一个和最后一个空格处进行分割,但是您需要将其余的(中间)加入其中:

def get_address(s):
    s = s.split()
    return ' '.join(s[1:-1])
    # s[1:-1] will remove the first (amount) and the last (payment) values
    # ' '.join will then put back the spaces that were removed from the address by s.split

输入:

print(get_address("44.53 54 orchard rd Cash"))
print(get_address("32.34 600 sprout brook lane Cash"))

输出:

54 orchard rd
600 sprout brook lane

答案 3 :(得分:0)

您还可以使用正则表达式使它更加灵活和强大。在这里,前两个\d+元素表示您必须首先用点号,空格,然后是返回地址(用括号())组成的两位数字,该地址包含任何字符({ {1}}或(\w)个空格字符([]),直到一个空格和另一个字符序列(\W)。

\w+

答案 4 :(得分:0)

您可以使用拆包获得第一个和最后一个,然后重新组装然后休息以形成地址:

amount,*rest,payment = s.split()
address = " ".join(rest)