Регулярное выражение для сопоставления цифр в конкретной строке - PullRequest
0 голосов
/ 07 декабря 2018

У меня есть следующая строка:

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)(?:[^;\d])*(\d)(?:[^;\d])*(\d)

Но, как вы можете видеть, я достиг своей цели с повторением группы

(?:[^;\d])*

И если я попытаюсь сделать этос множителем, он будет ловить только последний номер, и я хочу все числа.Насколько я знаю, решения для этого нет, но stackoverflow не позволяет мне удалить этот вопрос.Я использую regex101 для проверки.

Ответы [ 2 ]

0 голосов
/ 07 декабря 2018

Способ Perl:

#!/usr/bin/perl
use Modern::Perl;

my @fruits = (
    'Apple---a---1---d---2',
    'Pear---b---3---e---4',
    'Melon---c---9---f---8',
);
my %fruits;
/^(\w+)\D+(\d+)\D+(\d+)/ and @{$fruits{$1}} = ($2, $3) for @fruits;
while (1) {
    my $in = <>;
    chomp $in;
    last if $in eq 'exit';
    say "@{$fruits{$in}}" if exists $fruits{$in};
}

Запуск:

perl test.pl 
Pear
3 4
blah
Melon
9 8
exit
0 голосов
/ 07 декабря 2018

Да, вы можете использовать split () на ---, то есть:

[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) )

Live Demo (Включите интерактивный режим ON )

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...