正则表达式允许安全字符

时间:2017-03-08 19:54:38

标签: python regex

这是我使用正则表达式的第一天。我需要帮助制定一个。根据规范,域名以外的任何安全字符集如下: 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

2 个答案:

答案 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(),因为字母可能多于符号,因此它会稍快一点。