Python: удаление символов из строки, включая \ r \ n - PullRequest
0 голосов
/ 27 марта 2012

У меня очень специфический вызов.Я анализирую строку командной строки, и мне нужно избавиться от всего, кроме определенного набора чисел.Например:

str = 'abd-256PA\r\n20db'

Я хочу получить это число 20!Как мне это сделать?Имейте в виду, что иногда число может быть одной цифрой, например 'abc-256\r\n0db'.И строка не обязательно будет содержать '\r\n'.

Я пробовал rstrip, lstrip, strip, [:] и некоторые другие вещи без успеха.

Ответы [ 3 ]

3 голосов
/ 27 марта 2012

Если искомое число всегда находится в конце строки, вы можете получить его с помощью регулярного выражения такого типа: ([0-9]+)[^0-9]*$

Пример программы:

import re
print re.search(r'([0-9]+)[^0-9]*$','abd-256PA\r\n20db').group(1)

Примервывод:

20

Тестовая программа:

import re

str = ['abd-256PA\r\n20db', 
       'abc-256\r\n0db', 
       'abc-256aa0db',
       'uio1289248282dasd1786ddass',
       '12',
       '2101a123aasdqwqwe']

for x in str:
    print '"%s" >> "%s"' %(x, re.search(r'([0-9]+)[^0-9]*$',x).group(1))

Тестовый вывод:

"abd-256PA
20db" >> "20"
"abc-256
0db" >> "0"
"abc-256aa0db" >> "0"
"uio1289248282dasd1786ddass" >> "1786"
"12" >> "12"
"2101a123aasdqwqwe" >> "123"

Объяснение по запросу:

Python имеет модуль регулярных выражений re с функцией search , которая пытается найти совпадение с регулярным выражением в данной строке.

По сути, это ([0-9]+)[^0-9]*$ означает:

  • [0-9] любое число от 0 до 9
  • [0-9]+ 1 или более вхождение любого числаот 0 до 9
  • [^0-9] любой символ, НО цифры от 0 до 9
  • [^0-9]* последовательность из 0 или более символов, где нет цифр от 0 до 9
  • $ конец строки
  • (...) группа захвата, материал, который мы пытаемся найти
  • ([0-9]+)[^0-9]*$ последовательность из 1 или более чисел, за которыми следует 0 или более не-numbers, за которыми следует конец строки

Функция re.search принимает 2 параметра: регулярное выражение и строку, в которой нужно искать это регулярное выражение.И он возвращает объект типа MatchObject .В основном group(1) означает «дай мне первую захваченную группу» (ту, что в (...)).

1 голос
/ 27 марта 2012

Вы можете попробовать это:

str.replace('\n','').replace('\r','').replace('abc-256','').replace('abd-256','').replace('PA','').replace('db','')

Это работает для двух описанных вами случаев. Он просто заменяет все части бесполезной информации пустой строкой.

обновлено:

Если вы не знаете, какой будет строка, и знаете только, что после нужного числа есть суффикс "db", то вы можете попробовать это регулярное выражение:

import re
regex=re.compile("([0-9]+)db")
str="abd-256PA\r\n20db"
parsed_number = regex.findall(str)[0]
print parsed_number
1 голос
/ 27 марта 2012

, если ваше выражение всегда заканчивается "db", попробуйте:

import re
d = "abd-256PA\r\n20db"
s = re.search("\d{1,2}db",d)
print d[s.start():s.end()-2]
...