Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中将文本转换为字符串?_Python_String_List_Text - Fatal编程技术网

在python中将文本转换为字符串?

在python中将文本转换为字符串?,python,string,list,text,Python,String,List,Text,所以我试图制作一段if代码,它可以接受一个字符串,忽略其中的所有纯文本,并返回一个数字列表,但我遇到了麻烦 基本上,我想变成“晚餐我想吃两片比萨饼,然后吃一勺冰淇淋” [2,1](仅举一个例子) 这是我尝试过的,但没有去除任何东西。我尝试了rstrip(“\D”),因为我认为它应该删除文本,但对于列表似乎不起作用 你知道我哪里出错了吗?或者有什么方法可以解决这个问题吗?这听起来像是课堂作业,所以试试这个: 使用str.split将句子分成单词 使用str.isdigit确定哪些单词都是数字 使用

所以我试图制作一段if代码,它可以接受一个字符串,忽略其中的所有纯文本,并返回一个数字列表,但我遇到了麻烦

基本上,我想变成“晚餐我想吃两片比萨饼,然后吃一勺冰淇淋” [2,1](仅举一个例子)

这是我尝试过的,但没有去除任何东西。我尝试了rstrip(“\D”),因为我认为它应该删除文本,但对于列表似乎不起作用


你知道我哪里出错了吗?或者有什么方法可以解决这个问题吗?

这听起来像是课堂作业,所以试试这个:

  • 使用str.split将句子分成单词
  • 使用str.isdigit确定哪些单词都是数字
  • 使用int()将纯数字字转换为整数
  • 返回列表

  • 这听起来像是课堂作业,所以试试这个:

  • 使用str.split将句子分成单词
  • 使用str.isdigit确定哪些单词都是数字
  • 使用int()将纯数字字转换为整数
  • 返回列表

  • 您可以使用
    re.split
    来实现这一点(与您发布的代码大致相同,正如TigerhawkT3所观察到的,您似乎将正则表达式与字符串混为一谈),但更好的方法是
    re.findall
    。再加上调用
    int
    将数字字符串转换为实际整数就可以了。

    您可以使用
    re.split
    来实现这一点(稍微按照您发布的代码行,正如TigerhawkT3所观察到的,您似乎将正则表达式与字符串混合在一起)但对于您的目的来说,更好的方法是
    re.findall
    。再加上调用
    int
    将数字字符串转换为实际整数,就可以完成这项工作。

    您可以使用正则表达式执行此操作:

    import re
    
    string = "I want to eat 12 slices of pizza for dinner, and then 1 scoop of ice cream for desert"
    numbers = list(map(int, re.findall(r"\d+", string)))
    print(numbers)
    #[12, 1]
    

    但是,
    str.rstrip()
    方法不使用正则表达式,因此您的方法不起作用。

    您可以使用正则表达式:

    import re
    
    string = "I want to eat 12 slices of pizza for dinner, and then 1 scoop of ice cream for desert"
    numbers = list(map(int, re.findall(r"\d+", string)))
    print(numbers)
    #[12, 1]
    

    但是,
    str.rstrip()
    方法不使用正则表达式,因此您的方法不起作用

    dummy = [int(c) for c in dummy.split(" ") if c.isdigit() ]
    

    这只会拾取两边用空格分隔的数字(例如,“2cm”不会被拾取)。

    这样做的一种方法是

    dummy = [int(c) for c in dummy.split(" ") if c.isdigit() ]
    
    这将只拾取两边用空格分隔的数字(例如,不会拾取“2cm”)

    方法将创建匹配字符串的列表,简单的列表理解将它们转换为
    int
    s

    import re
    dummy = "I want to eat 2 slices of pizza for dinner, and then 1 scoop of ice cream for desert"
    
    result = [int(d) for d in re.findall(r'\d+', dummy)]
    
    print(result)
    
    给出:

    [2, 1]
    
    re.findall()
    方法将创建匹配字符串的列表,简单的列表理解将它们转换为
    int
    s

    import re
    dummy = "I want to eat 2 slices of pizza for dinner, and then 1 scoop of ice cream for desert"
    
    result = [int(d) for d in re.findall(r'\d+', dummy)]
    
    print(result)
    
    给出:

    [2, 1]
    

    您将普通文本与正则表达式混淆。
    \D
    用于正则表达式中
    rstrip
    和family不将正则表达式作为参数,只使用字符串或特殊值
    None
    (默认值)。您将普通文本与正则表达式混淆。
    \D
    用于正则表达式中
    rstrip
    和family不将正则表达式作为参数,只使用字符串或特殊值
    None
    (默认值)。因此我添加了exclude=set(string.标点符号)dummy=''。join(如果ch不在exclude中,则ch代表ch-in-dummy)开始时,即使在数字后面有标点符号,它仍然会提取数字谢谢,所以我添加了exclude=set(string.标点符号)dummy=''.join(如果ch不在exclude中,则ch代表ch in dummy)到开头,这样即使在数字后面加上标点符号,它仍然可以提取数字。谢谢