найти неопределенную последовательность чисел и тире регулярное выражение python - PullRequest
0 голосов
/ 30 марта 2020

Итак, у меня есть несколько строк, которые содержат последовательность чисел и тире:

strings = [
     '32sdjhsdjhsdjb20-11-3kjddjsdsdj435',
     'jdhjhdahj200-19-39-2-12-2jksjfkfjkdf3345',
     '1232sdsjsdkjsop99-7-21sdjsdjsdj',
]

У меня есть функция:

def get_nums():
    for string in strings:
        print(re.findall('\d+-\d+', string))

Я хочу, чтобы эта функция возвращала следующее :

['20-11-3']
['200-19-39-2-12-2']
['99-7-21']

Но моя функция возвращает:

['20-11']
['200-19', '39-2', '12-2']
['99-7']

Я не знаю, как вернуть полную последовательность чисел и тире.

Последовательности всегда начинаются и заканчиваться цифрами, никогда не тире. Если между числами нет тире, их не следует возвращать.

Как я могу использовать регулярные выражения для возврата этих последовательностей? Есть ли альтернатива регулярному выражению, которая была бы лучше здесь?

Ответы [ 2 ]

3 голосов
/ 30 марта 2020
def get_nums():
    for string in strings:
        print(re.findall('\d+(?:-\d+)+', string))

Это должно быть (?:…), а не просто (…), см. https://medium.com/@yeukhon / non-capturing-group-pythons-регулярно-expression-75c4a828a9eb

0 голосов
/ 30 марта 2020
import re

strings = [
    '32sdjhsdjhsdjb20-11-3kjddjsdsdj435',
    'jdhjhdahj200-19-39-2-12-2jksjfkfjkdf3345',
    '1232sdsjsdkjsop99-7-21sdjsdjsdj',
]

def get_nums():
    for string in strings:
        print(re.search(r'\d+(-\d+)+', string).group(0))

get_nums()

Выход:

20-11-3  
200-19-39-2-12-2  
99-7-21  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...