3 回答

TA貢獻1942條經驗 獲得超3個贊
re := regexp.MustCompile(`(?s)\(( | .*? )\)`)
s = re.ReplaceAllString(s, "")
游樂場: https: //play.golang.org/p/t93tc_hWAG

TA貢獻1911條經驗 獲得超7個贊
正則表達式“無法計數”(過于簡化,但請耐心等待),因此您無法匹配無限量的括號嵌套。我猜你最關心的是在這種情況下只匹配一個級別,所以你需要使用類似的東西:
foo := regexp.MustCompile(`^ *\( ([^ ]| [^)]*? \)$`)
這確實要求注釋是一行的最后一件事,因此最好在此處添加“匹配零個或多個空格”。這與字符串 "( ( ) )" 不匹配或嘗試滿足任意嵌套,因為這遠遠超出了正則表達式可以做的計數。
他們在計數方面可以做的是“計算特定的次數”,他們不能“計算有多少等等,然后確保有相同數量的 flob”(這需要從正則表達式到上下文 -免費語法)。

TA貢獻1995條經驗 獲得超2個贊
這是一種匹配所有有問題的 3 行的方法:
(?m)^[\t\p{Zs}]*\([\pZs}\t](?:[^()\n]*[\pZs}\t])?\)[\pZs}\t]*$
在新的regex101.com上查看 Go 正則表達式演示
詳情:
(?m)
- 多行模式開啟^
- 由于上述原因,一行的開始[\t\p{Zs}]*
- 0+ 水平空格\(
- 一種(
[\pZs}\t]
- 正好 1 個水平空白(?:[^()\n]*[\pZs}\t])?
- 一個可選的序列匹配:[^()\n]*
- 一個否定字符類,匹配 0+ 以外的字符(
和)
一個換行符[\pZs}\t]
- 水平空白\)
- 文字)
[\pZs}\t]*
- 0+ 水平空格$
- 由于(?m)
, 一行的結尾。
去游樂場演示:
package main
import (
"regexp"
"fmt"
)
func main() {
var re = regexp.MustCompile(`(?m)^[\t\p{Zs}]*\([\pZs}\t](?:[^()\n]*[\pZs}\t])?\)[\pZs}\t]*$`)
var str = ` ( )
( This is a comment )
1 2 +
\ a
: square dup * ;
( foo bar
baz )
(quux)
( ( )
(
( )`
for i, match := range re.FindAllString(str, -1) {
fmt.Println("'", match, "' (found at index", i, ")")
}
}
- 3 回答
- 0 關注
- 209 瀏覽
添加回答
舉報