这是我使用正则表达式的第一天。我需要帮助制定一个。根据规范,域名以外的任何安全字符集如下:
output <- structure(list(factor1 = structure(c(1L, 1L, 2L, 1L, 1L, 2L,
2L, 1L), .Label = c("f1", "f2"), class = "factor"), factor2 = c(1L,
2L, 1L, 3L, 4L, 2L, 3L, 5L), var1 = structure(c(1L, 2L, NA, 3L,
4L, 6L, 7L, 5L), .Label = c("ax", "df", "gg", "hg", "js", "tg",
"y"), class = "factor"), var2 = structure(c(7L, 3L, 5L, 1L, 2L,
6L, 6L, 4L), .Label = c("a", "g", "gg", "hh", "sg", "sh", "t"
), class = "factor")), .Names = c("factor1", "factor2", "var1",
"var2"), class = "data.frame", row.names = c(NA, -8L))
实际上,A-Z a-z 0-9 - . _ ~ ( ) ' ! * : @ , ; + ?
和+
只有在网址中使用时才是安全的,不是这样。
如何将上面的字符集表示为正则表达式(即只允许这些字符,排除所有其他字符)。
我去了regexr.com。到目前为止,我通过反复试验建立了?
,这是不够的。有人可以帮助我在这里制定正确的正则表达式。顺便说一句,我使用的是Python 2.7
答案 0 :(得分:2)
r"^[A-Za-z0-9._~()'!*:@,;+?-]*$"
这只会匹配包含安全字符的字符串。
答案 1 :(得分:2)
您可以避免使用正则表达式来测试字符串中的单个字符。
我将all
用于str.isalnum
或检查允许的非字母数据:
x and all(x.isalnum() or x in "._~()'!*:@,;+?-" for x in s)
x
是否为空(空字符串不是有效网址)isalnum()
,因为字母可能多于符号,因此它会稍快一点。