RegEx匹配4减去非相邻

时间:2016-01-22 15:04:25

标签: regex

有没有办法创建一个RegEx匹配*-*-*-*-*(一个包含4“的字符串,所以它匹配1-2-3-4-5AB-CD-EF-GH-IJ但不匹配9-8-7

最近我尝试过的RegEx是([\w\-\.]+[\-\.][\w\-\.]+[\w\-\.]+)但它也匹配9-8-7。

6 个答案:

答案 0 :(得分:1)

没有其他限制,-([^-]+-){3}符合您的要求。

你自己的尝试只涉及三次重复,并允许一段时间或空格而不是任何破折号。

答案 1 :(得分:0)

也许像这样-

({{1}}以外的任何字符,一次或多次,后跟短划线)4次,然后任何其他字符一次或多次

答案 2 :(得分:0)

您可以使用([^-])+-([^-])+-([^-])+-([^-])+-([^-])+([^-])+将匹配其中没有-的每个字符串。

答案 3 :(得分:0)

(.*([^-]|^)-){4}

See it in action

  • .* - 零个或多个字符
  • ([^-]|^) - 一个字符,不是短划线或字符串本身的开头
  • - - 字面意思
  • {4} - 整件事重复了4次

答案 4 :(得分:0)

您可以使用此正则表达式:

^[^-.]+([-.])(?:[^-.]+\1){3}[^-.]+$

RegEx Demo

<强>解体:

^            # start
[^-.]+       # match 1 or more of non-dot & non-hyphen char
([-.])       # match 1 dot OR hyphen char and capture it as group #1
(?:          # non-capturing group start
   [^-.]+    # match 1 or more of non-dot & non-hyphen char
   \1        # match same char as captured in group #1
){3}         # non-capturing group end, repeat 3 occurrences of this group
[^-.]+       # match 1 or more of non-dot & non-hyphen char
$            # end

答案 5 :(得分:0)

一般来说,如果你将X设置为&#39;除了非相邻连字符之外的任何字符,那么你的模式就会变成

new("SpatialPointsDataFrame" , data = structure(list(x = c(38.4129, 38.41697, 38.41501), y = c(4.95659, 4.95809, 4.96122)), .Names = c("x", "y"), row.names = c(105L, 166L, 185L), class = "data.frame") , coords.nrs = numeric(0) , coords = structure(c(434912.0166297, 435363.392542353, 435146.398500838, 547894.637850701, 548060.055746692, 548406.25007762), .Dim = c(3L, 2L), .Dimnames = list(c("105", "166", "185"), c("x", "y"))) , bbox = structure(c(434912.0166297, 547894.637850701, 435363.392542353, 548406.25007762), .Dim = c(2L, 2L), .Dimnames = list(c("x", "y"), c("min", "max"))) , proj4string = new("CRS", projargs = "+proj=utm +zone=37 +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0") )

因此,挑战只是将X定义为所有非连字符或相邻连字符的字符串。

X*-X+-X+-X+-X*

撰写两个......

([^-]|(--+))

在这里试试...... https://regex101.com/r/lG3hM5/1