Разделение строки на основе позиций с помощью регулярного выражения

#regex #string #split

#регулярное выражение #строка #разделение

Вопрос:

Мне нужно преобразовать эту (дату) строку «12112014» в «12.11.2014»

Что я хотел бы, так это:

Разделите первые 2 строки на «12», добавьте «.», затем разделите строку с 3-4, чтобы получить «11», добавьте «.» в конце разделите последние 4 строки (или 5-8), чтобы получить «2012»

Я уже выяснил, как получить первые 2 символа ( «^ d{2}» ), но мне не удалось получить символы на основе позиции.

Ответ №1:

Каким бы ни был язык программирования, вы должны попытаться извлечь цифры из строки, а затем соединить их с помощью «.».

В perl это можно сделать следующим образом :

 $_ = '12112014';

s/(d{2})(d{2})(d{4})/$1.$2.$3/;

print "$_";
  

Ответ №2:

Без указания языка, который вам нужен, я выбрал javascript:

 var s = '12012011';
var s2 = s.replace(/(d{2})(d{2})(d{4})/,'$1.$2.$3'));
console.log(s2);  // prints "12.01.2011"
  

Суть этого в том, что вы используете () для указания групп внутри вашего регулярного выражения, а затем можете использовать группы в своем выражении замены.

То же самое в Java:

 String s = "12012011";
String s2 = s.replaceAll("(\d{2})(\d{2})(\d{4})", "$1.$2.$3");
System.out.println(s2);
  

Ответ №3:

Я не думаю, что вы могли бы сделать это только с помощью split.

Вы могли бы расширить свое выражение до:

 "(^(d{2})(d{2})(d{4}))"
  

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

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