Соответствие шаблона REGEX в R для номера курса - PullRequest
3 голосов
/ 05 июня 2019

Мне нужно определить соответствующий номер курса, у которого есть xx.3xxxxxx. Вот некоторые примеры номеров курсов.

26.3730004   
27.0210000    
26.3730009   
26.7114001   
23.9610071  
26.0A34430    
23.3670005    
26.0B05430    

Я перепробовал много паттернов, один из примеров, который я использовал, это паттерн ниже. Не найдено ни одного совпадения.

"[^ 0-9] {2} \ Q. \ E3 [^ 0-9] + $"

Я пытался использовать grep и grepl. Мне действительно нужен код для возврата индексов.

Этот код показывает мою попытку пометить строки, которые имеют совпадения.

Teacher$virtual[
            which(
                 grepl("[^0-9]{2}\\Q.\\E3[^0-9]+$",Teacher$CourseNumber))]
               <- "1"

Мне нужно удалить любую строку из моего фрейма данных, в которой есть номер курса с этим шаблоном. XX.3XXXXXX

Но мой код не нашел соответствия. Можете ли вы помочь мне?

Ответы [ 2 ]

1 голос
/ 05 июня 2019

Вы должны использовать

grepl("^[0-9]{2}\\.3", Teacher$CourseNumber)

См. График регулярных выражений :

enter image description here

Подробнее :

  • ^ - начало строки
  • [0-9]{2} - две цифры
  • \\. - точка (обратите внимание, что экранирование регулярного выражения является литералом обратной косой черты, но внутри строкового литерала, "...", один обратный слеш используется для формирования escape-последовательностей строк, поэтому обратная косая черта должна быть двойной, чтобы получить буквенный символ обратной косой черты, необходимый для выхода из регулярного выражения)
  • 3 - 3 char.

ПРИМЕЧАНИЕ : Если вы хотите использовать цитирование в шаблоне с \Q и \E (между которыми все символы обрабатываются буквально), вам нужно использовать регулярное выражение PCRE, добавьте perl=TRUE и использовать

grepl("^[0-9]{2}\\Q.\\E3", Teacher$CourseNumber, perl=TRUE)

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

1 голос
/ 05 июня 2019

Здесь это простое выражение, вероятно, будет охватывать следующее:

^[0-9]{2}\.[3].+$

, который имеет [3] границу сразу после .. Это, вероятно, будет работать без начального и конечного якорей:

[0-9]{2}\.[3].+

Демо

Мы можем добавить или уменьшить границы, если это будет необходимо.

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