带 If Else 条件的正则表达式
Regular Expression with If Else Condition
我对正则表达式中的 If Else 条件有疑问。我有一个包含以下格式的文件。我一直在寻找 return 值为 0.0.985 或 3.3.5-3811 的值。
我试图在正则表达式中使用 if else 条件但无法这样做,谁能在解决问题时向我解释一下。
random-app-0.0.985.tgz
busy-app-7.3.1.2-3.3.5-3811-a19874elkc-123254376584.zip
下面是我尝试使用的 Go 代码
package main
import (
"fmt"
"io/ioutil"
"regexp"
)
func main(){
content, err:= ioutil.ReadFile("version.txt")
if err != nil{
fmt.Println(err)
}
version:= string(content)
re:= regexp.MustCompile(`(\d+).(\d+).(\d+)|(\d+).(\d+).(\d+).(\d+)`)
result:= re.FindAllStringSubmatch(version,-1)
for i:= range(result){
fmt.Println(result[i][0])
}
}
输出就像
0.0.985
7.3.1
2-3.3
5-3811
19874
123254376584
您的代码的一个问题是,在正则表达式中 .
匹配任何字符,但您打算它匹配文字点。请改用 \.
或 [.]
。
可以使用以下正则表达式:[\d\.]+[\.-][\d]{2,}
package main
import (
"regexp"
"fmt"
)
func main() {
var re = regexp.MustCompile(`(?m)[\d\.]+[\.-][\d]{2,}`)
var str = `random-app-0.0.985.tgz
busy-app-7.3.1.2-3.3.5-3811-a19874elkc-123254376584.zip`
for i, match := range re.FindAllString(str, -1) {
fmt.Println(match, "found at index", i)
}
}
输出
0.0.985 found at index 0
3.3.5-3811 found at index 1
?m
多行修饰符。使 ^ 和 $ 匹配每一行的 begin/end(不仅是字符串的 begin/end)。在这种情况下,它没有太大区别。没有它也能工作。
[\d\.]+
至少匹配一次(量词 +
)一个数字或点的序列
[\.-]
匹配点或连字符
[\d]{2,}
匹配至少两个数字(量词 {2,}
)
我对正则表达式中的 If Else 条件有疑问。我有一个包含以下格式的文件。我一直在寻找 return 值为 0.0.985 或 3.3.5-3811 的值。 我试图在正则表达式中使用 if else 条件但无法这样做,谁能在解决问题时向我解释一下。
random-app-0.0.985.tgz
busy-app-7.3.1.2-3.3.5-3811-a19874elkc-123254376584.zip
下面是我尝试使用的 Go 代码
package main
import (
"fmt"
"io/ioutil"
"regexp"
)
func main(){
content, err:= ioutil.ReadFile("version.txt")
if err != nil{
fmt.Println(err)
}
version:= string(content)
re:= regexp.MustCompile(`(\d+).(\d+).(\d+)|(\d+).(\d+).(\d+).(\d+)`)
result:= re.FindAllStringSubmatch(version,-1)
for i:= range(result){
fmt.Println(result[i][0])
}
}
输出就像
0.0.985
7.3.1
2-3.3
5-3811
19874
123254376584
您的代码的一个问题是,在正则表达式中 .
匹配任何字符,但您打算它匹配文字点。请改用 \.
或 [.]
。
可以使用以下正则表达式:[\d\.]+[\.-][\d]{2,}
package main
import (
"regexp"
"fmt"
)
func main() {
var re = regexp.MustCompile(`(?m)[\d\.]+[\.-][\d]{2,}`)
var str = `random-app-0.0.985.tgz
busy-app-7.3.1.2-3.3.5-3811-a19874elkc-123254376584.zip`
for i, match := range re.FindAllString(str, -1) {
fmt.Println(match, "found at index", i)
}
}
输出
0.0.985 found at index 0
3.3.5-3811 found at index 1
?m
多行修饰符。使 ^ 和 $ 匹配每一行的 begin/end(不仅是字符串的 begin/end)。在这种情况下,它没有太大区别。没有它也能工作。
[\d\.]+
至少匹配一次(量词 +
)一个数字或点的序列
[\.-]
匹配点或连字符
[\d]{2,}
匹配至少两个数字(量词 {2,}
)