1

如何使用正则表达式从文本中提取此字符串

文本:{abcdefgh="test-name-test-name-w2-a"} 54554654654 .654654654

预期输出:test-name-test-name-w2

注意:我试过这个"([^\s]*)",输出是test-name-test-name-w2-a. 但是需要我上面提到的输出。

4

2 回答 2

1

你可以试试这个正则表达式

.*\"(.*)-.*\".*

regex101 的链接是test

于 2019-10-29T07:17:12.377 回答
0

您可以将否定字符类扩展为也排除-"。然后使用使用相同字符类的重复模式,前面带有-

该值在第一个捕获组中。

"([^\s-"]+(?:-[^\s-"]+)*)-[^\s-"]+"
  • "匹配一个"字符
  • (捕获组 1
    • [^\s-"]+匹配除- "空格字符以外的任何字符的 1 次以上
    • (?:非捕获组
      • [^\s-"]+匹配除- "空格字符以外的任何字符的 1 次以上
    • )*关闭非捕获组,重复0+次
  • )关闭捕获组
  • -[^\s-"]+匹配除- "空格字符以外的任何字符的 1 次以上
  • "匹配一个"字符

正则表达式 101 演示

(在 FLAVOR 面板的 regex101 上,您可以在 PCRE 和 Golang 之间切换)

更新

为了匹配单词test出现的位置而不是例如test1,您可以使用否定的前瞻(?![^"\s]*\btest\w)来断言不存在 test 后跟单词字符。

""(?![^"\s]*\btest\w)([^\s-"]+(?:-[^\s-"]+)*)-[^\s-"]+""

正则表达式演示

于 2019-10-29T07:16:00.540 回答