регулярное выражение для конкретного набора данных - PullRequest
0 голосов
/ 01 октября 2018

Изображение содержит пример набора данных. Я хочу создать регулярное выражение, которое даст мне только Id и заголовок из набора данных

например,

15011721827: 52352403: Война Лиги Индий 52352403 является идентификатором для статьи.Название статьи - «Война Лиги Индии».

Я хочу извлечь пары идентификаторов и названий из данного текстового файла

Ответы [ 3 ]

0 голосов
/ 01 октября 2018

Поскольку в вашем наборе данных, который вы можете иметь в заголовке a :, лучше использовать RegEx, например, ниже

15011721827:52352403:War of the League of the Indies
9428491646:27687104:Deepwater Pathfinder
3524782652:4285058:Wikipedia:Articles for deletion/Joseph Prymak
2302538806:1870985:Cardinal Infante Ferdinand`

В третьей строке есть :, которые отделяют Википедию от остальной частиЗаголовок, если вы используете функцию split, у вас будет массив с 4 вместо 3 частей.Чтобы избежать такого рода проблем, я решил использовать регулярное выражение

var pattern = /^(\d+):(\d+):(.+)$/
var data = "15011721827:52352403:War of the League of the Indies"
var matches = data.match(pattern)
console.log(matches)

// matches[0] = "15011721827:52352403:War of the League of the Indies"
// matches[1] = "15011721827"
// matches[2] = "52352403"
// matches[3] = "War of the League of the Indies"
0 голосов
/ 06 октября 2018
([0-9]+)[:]([0-9]+)[:](.*)\n

Группы захвата ([0-9] +) + Квантификатор - соответствует от одного до неограниченного количества раз, насколько это возможно, от 0 до 9 одного символа в диапазоне от 0 до9

[:] соответствует символу ':'

• 3-я группа захвата (. *) Соответствует любому символу (кроме ограничителей строки)

• \ n соответствует символуперевод строки

import re

text = open('example.txt').read()
pattern = r'([0-9]+)[:]([0-9]+)[:](.*)\n'
regex = re.compile(pattern)
for match in regex.finditer(text):
      result = ("{},{}".format(match.group(2),match.group(3)))
0 голосов
/ 01 октября 2018

Используя Javascript, вы можете сделать это просто используя split(), которые делят вашу строку при совпадении двойных точек:

var text = "1234567890:12312312:Lorem ipsum dolor sit amet";
var splitted = text.split(":");

console.log("id : " + splitted[1]);
console.log("Title : " + splitted[2]);

Используя чистое регулярное выражение, вы можете сделать это с этим: ([0-9]{10,})[:]([0-9]{8})[:]([a-zA-Z ]+)

Group 1 : 1234567890
Group 2 (ID) : 12312312 
Group 3 (Title) : Lorem ipsum dolor sit amet 

Первая группа обнаружит 10 чисел от 0 до 9Вторая группа обнаружит 8 чисел от 0 до 9. Третья группа обнаружит от A до Z и пробелы.

Рабочий пример: https://regex101.com/r/3TudrD/1

...