【问题标题】:Python - How can I separate characters and integers from a string into sub-strings?Python - 如何将字符串中的字符和整数分成子字符串?
【发布时间】:2014-03-26 20:03:02
【问题描述】:

我正在编写一个程序,允许用户创建探险工具包列表。我需要配置的最后一个区域是将每人的设备数量(来自已保存的探险队)乘以探险队的人数,从而为用户提供他们需要的设备数量。

但是,问题是,当用户输入他们想要的特定设备的数量时,单位与数量一致。 例如,在文件中,它看起来像这样: 水 100毫升

所以,我需要将“100”乘以一个数字,但需要先将它与“ml”分开。 我没有必要显示的代码,因为我不知道从哪里开始。

注意:我使用的是python 3.2,我可以轻松更改一些语法,但是任何额外的更改都会很棒,但不要太麻烦:)

【问题讨论】:

    标签: python string integer character substring


    【解决方案1】:

    为此使用re.sub

    >>> import re
    >>> s = "Water 100ml"
    >>> re.sub(r'\d+', lambda m: str(int(m.group())*5), s)
    'Water 500ml'
    

    【讨论】:

    • 哇,感谢您的快速回复!是的,这行得通。非常感谢:)
    • 请注意 - 这匹配每个自编号“组”。如果恰好有一个数字字符作为项目名称的一部分,它也会被相乘。 @Alex Thornton 的解决方案确保返回的正则表达式项目至少以一个数字开头,以防止出现某些问题,但当项目名称本身以任何数字开头时,它仍然会失败。
    【解决方案2】:

    您可以使用re.match提取值:

    >>> import re
    >>> item = "Water\n100ml\n"
    >>> re.match(r"([0-9]+)([a-z]+)", item.split()[1], re.I).groups()
    ('100', 'ml')
    

    然后对它们做任何你需要做的事情。


    编辑: 对于您评论中的第二点,如果您有指定格式的文件,您可以这样做:

    with open('file.txt') as f:
        data = f.readlines()
        items = list(zip(data[0::2], data[1::2]))  # A list of items like ('Water', '100ml')
    

    然后你可以对list 中的每个项目使用前面的正则表达式,除了some_item[1] 作为要搜索的字符串;其中some_item 是例如迭代期间的当前值。

    【讨论】:

    • 使用这个的时候发现一个问题,.txt文件中的那行不是“水100ml”,这个网站阻止我输入段落,所以文件中的文字是:“水\ n100ml\n"。另一个因素,(这是我可以做的一点,但是对于更短,更高效的代码,我认为有更好经验的人会有更好的方法)是文件中会有多个项目,如下所示:“水\n100ml\n绳索\n1m...等"
    • @wizton "Water\n100ml\n".split() 仍然得到这两个项目就好了。
    • 是的,当我按下添加评论时,我意识到应该没问题,然后在我的代码中看到一个错误,但第二个问题困扰着我
    • @wizton 查看编辑。这就是你可以每两行分组的方式。
    • 现在我可以将它放入我的完整代码中,但我遇到了错误:“zips are not subscript-able”,这是我浏览列表以使用它的时候每个正则表达式
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 2020-12-02
    相关资源
    最近更新 更多