регулярное выражение удалить цифры и - в начале - PullRequest
7 голосов
/ 24 августа 2010

Я обрабатываю список строк, но я хочу изменить строки, чтобы они не выглядели уродливо для пользователя.Список примеров будет выглядеть следующим образом:

2736162 Magazines
23-2311 Numbers
1-38122 Faces
5-231123 Newspapers
31-31235 Armynews
33-12331 Celebrities 1
33-22113 Celebrities 2
Cars
Glasses

И я хочу обрезать начало так, чтобы уродливая последовательность чисел и "-" были опущены, а пользователь видел только те данные, которые имеют смысл, например::

Magazines
Numbers
Faces
Newspapers
Armynews
Celebrities 1
Celebrities 2
Cars
Glasses

Как бы я обрезал цифры / - в начале с помощью регулярного выражения?

РЕДАКТИРОВАТЬ Можно ли было бы сконструировать тот же REGEX длятакже обрежьте эти значения от:

FFKKA9101U- Aquatic Environmental Chemistry
FLVKB0381U- Clinical Drug Development
4761-F-Filosofisk kulturkritik
B22-1U-Dynamic biochemistry

до:

Aquatic Environmental Chemistry
Clinical Drug Development
Filosofisk kulturkritik
Dynamic biochemistry

Правило, о котором я бы подумал, состоит в том, что, если перед - есть только заглавные буквы, цифры и / или знаки +это имеет смысл только для машины, и не является реальным словом, и поэтому должно быть удалено, хотя я не знаю, как сформулировать это в регулярном выражении.

Ответы [ 2 ]

14 голосов
/ 24 августа 2010

Похоже, вы можете сопоставить и заменить ^[\d-]*\s* пустой строкой.

[…] - это класс символов . Что-то вроде [aeiou] соответствует одному из строчных гласных. \d является сокращением для класса цифровых символов, поэтому [\d-] соответствует либо цифре, либо тире. \s является сокращением для класса символов пробела.

^ - это начало привязки строки . * - это ноль или более повтор .

Таким образом, шаблон соответствует в начале строки последовательности цифр или тире, за которой следует последовательность пробелов.

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


C # фрагмент

Вот пример фрагмента в C #:

var text = @"
2736162 Magazines
23-2311 Numbers
1-38122 Faces
5-231123 Newspapers
31-31235 Armynews
33-12331 Celebrities 1
33-22113 Celebrities 2
Cars
Glasses
";

Console.WriteLine(
  Regex.Replace(
     text,
     @"^[\d-]*\s*",
     "",
     RegexOptions.Multiline
  )
);

Вывод ( как видно на ideone.com ):

Magazines
Numbers
Faces
Newspapers
Armynews
Celebrities 1
Celebrities 2
Cars
Glasses

В зависимости от аромата вам может потребоваться указать многострочный режим как флаг /m (или (?m) встроенный). Возможно, вам также придется удвоить обратную косую черту, если вы представляете шаблон как строковый литерал, например в Java вы можете использовать text.replaceAll("(?m)^[\\d-]*\\s*", "").


Специальное примечание о включении тире в класс персонажа

Будьте осторожны при включении - в класс символов […], так как он может обозначать диапазон вместо буквального - символа. Что-то вроде [a-z] соответствует строчной букве. Что-то вроде [az-] соответствует либо 'a', 'z', либо '-'.

Похожие вопросы

0 голосов
/ 24 августа 2010

Если в каждой строке есть цифры (с или без), вы можете просто разбить строку на пробел, исключить первую часть и затем присоединиться снова.

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