regex - 正则表达式匹配特定行中的数字
问题描述
我有以下字符串:
Apple---a---1---d---2
Pear---b---3---e---4
Melon---c---9---f---8
我的输入是一个水果,我想从该特定行中选择所有数字。例如:
input: Apple
output: 1 2
input: Pear
output: 3 4
我可以使用 2 个正则表达式来做到这一点:一个用于获取线路,一个用于从线路中获取数字,但有没有办法将其合二为一?
谢谢!
编辑
我看到我必须更具体。问题:是否有可能在一个模式中捕捉到重复?我在 Pear 线上有一个匹配项,我能以某种方式抓住那条线上的数字吗?上面的例子不是现实生活中的,我不想用任何语言实现,不管是不是水果,只是一个简单的例子的抽象问题。
对于上面的示例,我创建了这个:
(?:Pear)(?:[^;\d])*(\d)(?:[^;\d])*(\d)
但正如你所看到的,我通过重复小组达到了我的目标
(?:[^;\d])*
如果我尝试使用乘数来执行此操作,它只会捕获最后一个数字,并且我想要所有数字。据我所知,这个问题没有解决方案,但是stackoverflow不允许我删除这个问题。我正在使用 regex101 进行检查。
解决方案
是的,您可以使用split() on ---
,即:
[y.strip() for y in x.split("---")]
s = """
Apple---a---1---d---2
Pear---b---3---e---4
Melon---c---9---f---8
"""
def fruit_game(fruit):
out = ""
for x in s.split():
parts = [y.strip() for y in x.split("---")]
if parts[0] == fruit :
out = "{}\n{} {}".format(parts[0], parts[2], parts[4])
break
if out :
return(out)
else:
return("Fruit not found")
while 1:
fruit = input("Choose a fruit:")
print( fruit_game(fruit) )
现场演示(打开交互模式)
推荐阅读
- azure-service-fabric - 服务结构自动缩放也可以横向扩展节点吗?
- fonts - 无法解码下载的字体 - ember-cli (3.7.1)
- java - RMI 客户端-服务器 NotBoundException
- html - 重写 .htaccess 的规则
- android - 无法从模拟器中的 android 应用程序连接到 Node JS localhost API
- android - Flutter - 如何在 iOS 上使用 shared_preferences 和 Settings.bundle(Android 呢?)
- python - 在 Apache Airflow 的自定义运算符中访问 params 参数
- c# - 这 ?运算符不能正常工作,而不是 if/else
- python - Python:使用匹配没有空格的字符串输入的文本文件查找单词
- java - 我可以在 JPA 中使用带有 @Query 的嵌套查询吗?