Python Regex: удаление необязательных символов - PullRequest
2 голосов
/ 29 апреля 2019

У меня есть шаблон регулярных выражений с дополнительными символами, однако на выходе я хочу удалить эти дополнительные символы. Пример:

string = 'a2017a12a'    
pattern =  re.compile("((20[0-9]{2})(.?)(0[1-9]|1[0-2]))")
result = pattern.search(string)
print(result)

У меня может быть такое совпадение, но в качестве вывода я хочу:

desired output = '201712'

Спасибо.

Ответы [ 5 ]

2 голосов
/ 29 апреля 2019

Вы уже собрали нужные данные в группы, и теперь вы можете использовать re.sub, чтобы заменить все совпадение только содержимым group1 и group2.

Попробуйте ваш измененный код Python,

import re

string = 'a2017a12a'    
pattern =  re.compile(".*(20[0-9]{2}).?(0[1-9]|1[0-2]).*")
result = re.sub(pattern, r'\1\2', string)
print(result)

Обратите внимание, как я добавил .* вокруг шаблона, поэтому любые дополнительные символы вокруг ваших данных сопоставляются и удаляются.Также удалены лишние скобки, которые не были нужны.Это также будет работать со строками, где вы можете иметь другие цифры, окружающие этот текст, например: hello123 a2017a12a some other 99 numbers

Вывод,

201712

Regex Demo

1 голос
/ 29 апреля 2019

Вы можете просто использовать re.sub с шаблоном \D (= не число):

>>> import re
>>> string = 'a2017a12a'
>>> re.sub(r'\D', '', string)
'201712'
0 голосов
/ 29 апреля 2019

Вы можете использовать re module метод для получения требуемого вывода, например:

    import re

    #method 1
    string = 'a2017a12a'
    print (re.sub(r'\D', '', string))

    #method 2
    pattern =  re.findall("(\d+)", string)
    print("".join(p for p in pattern))

Вы также можете обратиться к документу ниже для получения дополнительных знаний.

https://docs.python.org/3/library/re.html

0 голосов
/ 29 апреля 2019

Если вы хотите удалить все символы из строки, то вы можете сделать это

import re
string = 'a2017a12a'
re.sub('[A-Za-z]+','',string)

Вывод:

'201712'
0 голосов
/ 29 апреля 2019

Попробуйте это:

import re
string = 'a2017a12a'    
pattern =  re.findall("(\d+)", string)  # this regex will capture only digit
print("".join(p for p in pattern))  # combine all digits

Вывод:

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