Я пытаюсь использовать группу захвата регулярных выражений для выделения определенного текста из столбца. Одна вещь, которую я заметил, заключается в том, что группа захвата не существует, она захватывает все.Регулярное выражение захватывает все, когда группа захвата не существует
Вот код, я использую, чтобы создать новый столбец с разобранного текста (data.table синтаксис R):
regexp <- "(?:.*)([0-9]{2,3})(\\s?[Gg]?[Aa]?[Ll]?[Ll]?[Oo]?[Nn]?)(?:.*)"
data <- data[, Volume := gsub(regexp, "\\1\\2", Title)]
Данные выглядит следующим образом:
Nice 55 g fish tank with stand
45 Gallon Aquarium fish tank and Stand
Amazing Hexagonal Fish Tank.
92gallon fish tank
Fish Tank & Stand $30 obo
2007 PROLINE 29' GRAND SPORT CENTER CONSOLE
110 gallon tall fish tank
20 and 10 Gallon Aquarium/Fish Tanks
Результаты выглядят так:
55 g <- fine
45 Gallon <- fine
Amazing Hexagonal Fish Tank. <- not good. how to replace with NA?
92gallon <- fine
30 o <- wrongly identified
29 <- wrongly identified
10 gallon <- I thought [0-9]{2,3} would grab 2 or 3 digits?
10 gallon <- only 1 of 2 tank sizes identified
Цель состоит в том, чтобы вытащить размер объема танка из листинга как st насколько возможно. Итак, несколько вопросов:
Является ли это лучшей функцией R для выполнения этой задачи? Сначала я старался оставаться в базовых функциях, прежде чем устанавливать пакет.
Если в тексте не существует 2-значного числа, регулярное выражение, похоже, тянет весь текст. Я бы хотел «Удивительный гексагональный рыбный танк». быть НС.
Есть еще пара вещей, если их легко исправить, но главными вопросами являются те, что указаны выше.
Я очень ценю помощь! Мне бы хотелось попрактиковаться в регулярных выражениях в R, но, видимо, для меня это медленный, немой процесс.
* вне темы: * при назначении по ссылке (с помощью ': ='), вы не имеете для возврата результата. То есть 'data <-' избыточно. Проверьте виньет [Reference Semantics здесь] (https://github.com/Rdatatable/data.table/wiki/Getting-started). – Arun
Да, я еще не думал о неверно идентифицированных ... но NA предпочтительнее! – AlexP
Почему вы делаете каждое письмо необязательным? – hwnd