我正在制作一个从字符串中获取货币并将其转换为其他货币的程序。例如,如果字符串是'the car cost me $13,250'我需要获取$和13250。我已经有了这个正则表达式(?:\£|\$|\€)(?:.{1,}),但是很有可能字符串可能有多个价格,所有价格都使用不同的货币。这是我不知道如何有效地做的事情。
我需要知道的是如何从字符串中提取所有价格。我认为即使正则表达式只是返回类似的东西['$12,250,000','£14,500,123','£120.25']也没关系,因为我可以使用这样的东西来获取数字:
prices = ['$12,250','£14,500','£120']
for value in prices:
value.replace(',','')
Run Code Online (Sandbox Code Playgroud)
和这样的事情来获得货币:
for c in prices:
currency = c[0]
Run Code Online (Sandbox Code Playgroud)
还有一个问题,价格可能不是整数,可能是$12.54. 关于如何获得初始价格清单的任何帮助都会很棒。
我正在使用Python discord.py。这里的文件
我有一个在Discord服务器上运行的机器人,该机器人将服务器与subreddit链接在一起。用户具有各种命令,可以执行诸如获取最高提交,获取最新提交等操作。
我想向机器人添加一些功能,其中之一是关键字通知程序。机器人应该在subreddit中搜索标题中的关键字,然后通知用户列表中是否包含该关键字。我知道如何做到这一点,我已经做了很多次,但是我不知道如何使用Discord机器人来做到这一点。我没有使用asynchio或任何类型的异步编程的经验。
我尝试执行此操作的方式有效,但它非常简陋,绝对不好。在该on message()函数的顶部,我只添加了对该search_submissions()函数的调用,以便每当有人在服务器上发送新消息时,该漫游器就会扫描Reddit提交。服务器很忙,可以正常工作,但是我真的想以“适当”的方式来做。
我不知道如何在search_submissions()不将函数放入的情况下调用该函数on_message()。
编辑额外的代码:
import discord
TOKEN = "redacted"
client = discord.Client()
@client.event
async def reddit_search():
print("Searching")
@client.event
async def on_message(message):
if message.content.startswith("reddit!hot"):
# Get hot
# Do other things.
@client.event
async def on_ready():
print("Connected to Discord as {}.".format(client.user.name))
client.run(TOKEN)
Run Code Online (Sandbox Code Playgroud) 所以我现在已经坚持了大约一个小时左右,而我却无法让它发挥作用.到目前为止,我一直在尝试从字符串中提取整个链接,但现在我觉得获取视频ID可能更容易.
RegEx需要从以下链接样式中获取ID/URL,无论它们在字符串中的哪个位置:
http://youtube.com/watch?v=iwGFalTRHDA
http://www.youtube.com/watch?v=iwGFalTRHDA&feature=related
https://youtube.com/iwGFalTRHDA
http://youtu.be/n17B_uFF4cA
youtube.com/iwGFalTRHDA
youtube.com/n17B_uFF4cA
http://www.youtube.com/embed/watch?feature=player_embedded&v=r5nB9u4jjy4
http://www.youtube.com/watch?v=t-ZRX8984sc
http://youtu.be/t-ZRX8984sc
Run Code Online (Sandbox Code Playgroud)
到目前为止,我有这个RegEx:
((http(s)?\:\/\/)?(www\.)?(youtube|youtu)((\.com|\.be)\/)(watch\?v=)?([0-z]{11}|[0-z]{4}(\-|\_)[0-z]{4}|.(\-|\_)[0-z]{9}))
Run Code Online (Sandbox Code Playgroud)
这会捕获链接,但它也会将链接分解为多个部分并将其添加到列表中,因此如果字符串包含单个youtube链接,则打印列表时的输出如下所示:
('https://www.youtube.com/watch?v=Idn7ODPMhFY', 'https://', 's', 'www.', 'youtube', '.com/', '.com', 'watch?v=', 'Idn7ODPMhFY', '', '')
Run Code Online (Sandbox Code Playgroud)
我需要列表只包含链接本身,或只是视频ID(这将是更可取的).我现在已经尝试了很长一段时间,但是我无法理解.我想知道是否有人可以为我整理出正则表达式并告诉我哪里出错了以便将来我再也不会遇到这个问题?