2013-09-18 7 views
1

Использование регулярного выражения, как заменить 1 186,55 на 1186,55?замена регулярных выражений номеров

Моя строка поиска

\b[1-9],[0-9][0-9][0-9].[0-9][0-9] 

, который работает отлично. Я просто не могу заставить запасную часть работать.

+1

Просто замените все ',' (запятые) ничем? – Jerry

+1

Почему вы хотите использовать регулярное выражение? Почему бы просто не удалить символ ','? –

+0

Это файл с разделителями-запятыми. Замена всех запятых испортила бы определение поля. – dbmaven

ответ

3

You очень скудны с информацией в вашем вопросе. Я стараюсь ответить как можно более общим:

Вы можете сократить регулярное выражение немного с помощью кванторов, я хотел бы сделать это в качестве первого шага

\b[1-9],[0-9]{3}.[0-9]{2} 

Скорее всего, вы также можете заменить [0-9] на \d, является также более читаемый ИМО.

\b\d,\d{3}.\d{2} 

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

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

Здесь есть две возможности, либо вы можете получить, что содержание по \1 или $1

заменяемых строки затем будет

\1\2 

ИЛИ

$1$2 
+0

Спасибо stema. Это здорово! – dbmaven

1

, если вы просто хотите удалить запятую вы можете сделать (в Java или C#):

str.Replace(",", ""); 

(в Java это replace)

2

Python:

def repl(initstr, unwanted=','): 
    res = set(unwanted) 
    return ''.join(r for r in initstr if r not in res) 

Использование регулярных выражений:

from re import compile 
regex = compile(r'([\d\.])') 
print ''.join(regex.findall('1,186.55')) 

str.split() Использование метода:

num = '1,186.55' 
print ''.join(num.split(',')) 

Использование str.replace() метод:

num = '1,186.55' 
print num.replace(',', '') 
Смежные вопросы