Как использовать подстроки для сопоставления? [Дубликат]

Перейти к File=>Preference=>User Settings

Вы найдете settings.json

// Configures if the built-in HTML language support suggests Angular tags and properties.
"html.suggest.angular1": false,

"html.suggest.ionic": false,

"html.suggest.html5": false,

Просто найдите свой язык и установите suggest = false

Обновить

Настройка отключения всплывающих окон

"editor.parameterHints": false

14
задан Community 23 May 2017 в 11:51
поделиться

6 ответов

Стандарт regmatches плохо работает с захваченными совпадениями (в частности, несколько захваченных совпадений в одной строке). И в этом случае, поскольку вы «сопоставляете» взгляд вперед (игнорируя захват), само совпадение имеет нулевую длину. Существует также функция regmatches()<-, которая может это проиллюстрировать. Obseerve

x <- 'ACCACCACCAC'
m <- gregexpr('(?=([AC]C))', x, perl=T)
regmatches(x, m) <- "~"
x
# [1] "~A~CC~A~CC~A~CC~AC"

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

Я создал regcapturedmatches () , которую я часто использую для таких задач. Например,

x <- 'ACCACCACCAC'
regcapturedmatches(x, gregexpr('(?=([AC]C))', x, perl=T))[[1]]

#      [,1] [,2] [,3] [,4] [,5] [,6] [,7]
# [1,] "AC" "CC" "AC" "CC" "AC" "CC" "AC"

gregexpr захватывает все данные просто отлично, поэтому вы можете извлечь его из этого объекта в любом случае, если вы предпочитаете не использовать эту вспомогательную функцию.

6
ответ дан MrFlick 18 August 2018 в 02:07
поделиться
  • 1
    +1 Интересная функция, которую вы создали. Мне хорошо известны совпадения нулевой ширины, поэтому в основном регматики и другие пакеты, такие как stringi, r, не предназначены для этого? – hwnd 12 September 2014 в 04:45
  • 2
    Я не могу говорить с stringr, поскольку я никогда не использовал это сам, но regmatches действительно фокусируется на матче, а не на захвате (который очень сильно отличается от другого). Я добавил дополнительный образец, чтобы попытаться понять, что делает regmatches(), по сравнению с моей функцией. ` – MrFlick 12 September 2014 в 04:50
  • 3
    Да, я раньше использовал regmatches()<-, чтобы наблюдать эффект совпадений нулевой ширины. – hwnd 12 September 2014 в 04:53

Решение stringi с использованием группы захвата в стороне поиска:

> stri_match_all_regex('ACCACCACCAC', '(?=([AC]C))')[[1]][,2]
## [1] "AC" "CC" "AC" "CC" "AC" "CC" "AC"    

Это не работает с stringr, поскольку str_match_all не поддерживает регулярные выражения PCRE.

3
ответ дан gagolews 18 August 2018 в 02:07
поделиться
  • 1
    Странно, как получилось, что он не работал с stri_extract_all_regex – hwnd 26 October 2014 в 21:00
  • 2
    @hwnd: это совпадение 0; (?=...) не не продвигает позицию ввода. – gagolews 26 October 2014 в 21:02
  • 3
    Да, я знаю, что это совпадение с нулевой шириной =) Я предполагаю, что существует разница между extract_all_regex и match_all_regex – hwnd 26 October 2014 в 21:04
  • 4
    Нет, первый столбец результирующей матрицы (целое совпадение) состоит только из пустых строк :) – gagolews 26 October 2014 в 21:05
  • 5
    Теперь я вижу и понимаю, что вы имеете в виду. – hwnd 26 October 2014 в 21:06

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

> x <- 'ACCACCACCAC'
> m <- gregexpr('(?=([AC]C))', x, perl=T)
> mapply(function(X) substr(x, X, X+1), m[[1]])
[1] "AC" "CC" "AC" "CC" "AC" "CC" "AC"

Не стесняйтесь добавлять или комментировать лучший способ выполнить эту задачу.

7
ответ дан hwnd 18 August 2018 в 02:07
поделиться
  • 1
    Проблема с этим решением заключается в том, что он работает только тогда, когда захваченная область всегда имеет длину 2 символа. Более общее решение таково: – Ken Williams 10 August 2015 в 14:46
  • 2
    К сожалению. Я забыл, что не могу помещать блоки кода в комментарии. Сделаю это отдельным ответом. – Ken Williams 10 August 2015 в 14:48

Дополнительный ответ, основанный на собственном ответе @ hwnd (оригинал не разрешил захваченные области с переменной длиной), используя только встроенные функции R:

> x <- 'ACCACCACCAC'
> m <- gregexpr('(?=([AC]C))', x, perl=T)[[1]]
> start <- attr(m,"capture.start")
> end <- attr(m,"capture.start") + attr(m,"capture.length") - 1
> sapply(seq_along(m), function(i) substr(x, start[i], end[i]))
[1] "AC" "CC" "AC" "CC" "AC" "CC" "AC"

Довольно уродливый, что почему существуют пакеты stringr и т. д.

1
ответ дан Ken Williams 18 August 2018 в 02:07
поделиться

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

x <- 'ACCACCACCAC'
y <- substring(x, 1:(nchar(x)-1), 2:nchar(x))
y[y != "CA"]
# [1] "AC" "CC" "AC" "CC" "AC" "CC" "AC"
4
ответ дан Rich Scriven 18 August 2018 в 02:07
поделиться

Другим способом обхода одной и той же информации, которую я делал в прошлом, является замена "match.length" на "capture.length":

x <- c("ACCACCACCAC","ACCACCACCAC")
m <- gregexpr('(?=([AC]C))', x, perl=TRUE)
m <- lapply(m, function(i) {
       attr(i,"match.length") <- attr(i,"capture.length")
       i
     })
regmatches(x,m)

#[[1]]
#[1] "AC" "CC" "AC" "CC" "AC" "CC" "AC"
#
#[[2]]
#[1] "AC" "CC" "AC" "CC" "AC" "CC" "AC"
4
ответ дан thelatemail 18 August 2018 в 02:07
поделиться
  • 1
    +1 Спасибо за дополнительное решение. Я сделал схожие с capture.start и capture.length. – hwnd 12 September 2014 в 06:28
Другие вопросы по тегам:

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