C ++ regex передает строку внутри строки? [Дубликат]

Я не приурочил его, но я подозреваю, что это будет довольно быстро:

import numpy as np
list1=[1, 2, 3]
list2=[4, 5, 6]

list_sum = (np.add(list1, list2)).tolist()

[5, 7, 9]
0
задан C_Schuler 1 August 2015 в 20:20
поделиться

1 ответ

R"(\bthis\b)" является исходным строковым литералом , а не литералом регулярного выражения, если вы об этом думаете. В C ++ нет литералов регулярных выражений, но std::regexp может быть сконструирован из массива символов или std::string.

Таким образом, вы можете просто сделать

string word = "this";
R"(\b)" + word + R"(\b)"

или, что эквивалентно используя простые старые строковые литералы

string word = "this";
"\\b" + word + "\\b"

Примечание: В обоих случаях результатом является std::string, потому что word является std::string. Это отличается от R"(\bword\b)", который представляет собой массив символов. На всякий случай разница имеет значение.

Слово предупреждения, хотя: содержание слова, вероятно, происходит извне программы. Вам нужно процитировать его, поскольку он может содержать символы, которые являются особыми в регулярных выражениях. В противном случае вы, вероятно, создаете уязвимость безопасности в своей программе. Вы должны быть в порядке для упражнений класса, которые никто, кроме вашего преподавателя, не будет смотреть, но лучше всего поместить в свой код строку, например

#warning "word" needs proper quoting to avoid security vulnerabilities

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

3
ответ дан ex-bart 27 August 2018 в 09:14
поделиться
Другие вопросы по тегам:

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