如何使用正则表达式从文本中提取此字符串
文本:{abcdefgh="test-name-test-name-w2-a"} 54554654654 .654654654
预期输出:test-name-test-name-w2
注意:我试过这个"([^\s]*)",输出是test-name-test-name-w2-a. 但是需要我上面提到的输出。
您可以将否定字符类扩展为也排除-和"。然后使用使用相同字符类的重复模式,前面带有-
该值在第一个捕获组中。
"([^\s-"]+(?:-[^\s-"]+)*)-[^\s-"]+"
"匹配一个"字符(捕获组 1
[^\s-"]+匹配除- "空格字符以外的任何字符的 1 次以上(?:非捕获组
[^\s-"]+匹配除- "空格字符以外的任何字符的 1 次以上)*关闭非捕获组,重复0+次)关闭捕获组-[^\s-"]+匹配除- "空格字符以外的任何字符的 1 次以上"匹配一个"字符(在 FLAVOR 面板的 regex101 上,您可以在 PCRE 和 Golang 之间切换)
更新
为了匹配单词test出现的位置而不是例如test1,您可以使用否定的前瞻(?![^"\s]*\btest\w)来断言不存在 test 后跟单词字符。
""(?![^"\s]*\btest\w)([^\s-"]+(?:-[^\s-"]+)*)-[^\s-"]+""