3

这有点相关:正则表达式 - 格式化块中的文本 - IM但另一个问题。

寻找-具有以下条件的换行文本:

条件:

  • 令牌可以在行首或行尾
  • 标记必须由空格或一个或多个符号包围:{.,!@#$....}。
    • 不能是围绕相关-对的正常字符 [a-zA-Z]。
    • 请参阅示例测试 3 ...w-谢谢-
    • 测试 4 和 5 成功,因为-用 [^a-zA-Z] 包裹
  • 记号后面不能跟第-一个空格或最后一个空格-
    • “-Wow -” 将不匹配,因为结束-之前有一个空格。
    • 参见示例测试 6 和 7

对于正则表达式的前面,我需要:(^|[\s\W]+)
结尾是:($|[\s\W]+)

我有当前的表达式,但由于转义条件在找到第一个后停止而失败-

   (^|[\s\W]+)-([^\s][^-]*)-($|[\s\W]+)

示例测试字符串将是:

  1. (全部。):-Wow-thank you-.
  2. (哇):-Wow- thank you-!
  3. (零):- Wow-thank you-.
  4. (谢谢你):- Wow!-thank you-
  5. (谢谢你):- Wow -thank you-
  6. (全部):-Wow - thank you-
  7. (零):-Wow - thank you -

这需要向后看吗?(我是一个正则表达式新手,所以请多多包涵)或者我的中间情况完全错误。

非常感谢!
沃尔夫。

4

1 回答 1

1

尝试一个更简单的中间表达式。

(^|[\s\W]+)-(.*?)-($|[\s\W]+)
             ^^^

非贪婪通配符匹配将捕获匹配以下所需的最小字符串-($|[\s\W]+)


编辑。好的,我明白为什么这是错误的了。您希望一个非空格字符分别紧跟并接在开头和结尾的破折号之后。所以试试这个:

(^|[\s\W]+)-(\S.*?\S)-($|[\s\W]+)
             ^^   ^^
于 2013-03-08T07:11:03.473 回答