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