2015-03-24 3 views
0

Это play наглядно демонстрирует мое затруднительное положение.Почему числа удалены в regex.ReplaceAllString()

В конечном итоге я пытаюсь разбить непослушную строку на слова. Для меня «2015» - это слово, а значит, «100 долларов», но если вход «Один. 2wo, (три)», я хочу [One 2wo three]. Потому что идти не позволяет осведомленный регулярное выражение Unicode я думал, что сначала удалить все «ненужные символы», а затем использовать strings.Fields()

Проблема заключается в том, что любые номера раздели:

reg := regexp.MustCompile(`[\[\](){}"?!,-:;,']`) 
fmt.Println(reg.ReplaceAllString("one 1 zer0", "")) 
// outputs "one zer" when I'd expect "one 1 zer0" :(
+0

Вам не нужно регулярное выражение, чтобы удалить набор рун из строки. ['strings.Map()'] (https://golang.org/pkg/strings/#Map) является вашим другом (обратите внимание, что функция сопоставления может возвращать <0, чтобы указать, что руны будут падать, func может быть простым литералом завершение вызова ['unicode.IsXXX'] (https://golang.org/pkg/unicode/)). Вероятно, вы можете захотеть с ['strings.FieldsFunc()'] (https://golang.org/pkg/strings/#FieldsFunc), напрямую определяя, как вы хотите разделить вход. –

ответ

5

[,-:] матчи все символы в диапазоне , - :. Этот диапазон содержит все ASCII-цифры (см. ascii(7)). Поместите - в конце вместо:

reg := regexp.MustCompile(`[\[\](){}"?!,:;,'-]`) 
+0

Это одновременно раздражает и изящно. Благодаря! –

Смежные вопросы