首页 > 解决方案 > 捕获包装字符中的空格并删除它们,可能使用 RegEx

问题描述

到目前为止,我有这个:https ://regexr.com/511fs但它不仅仅在 [ ] 内部捕获,我可能知道为什么,但目前还没有找到更好的方法来做到这一点。

我有的示例字符串:

<s f x> <n o r e p e a t : 1> [ S h a t t e r i n g G l a s s ] <s f x> <n o r e p e a t : 1> [ S h a t t e r i n g G l a s s ] <s f x> <n o r e p e a t : 1> [ B r e a k i n g C e r a m i c s ] <s f x> <n o r e p e a t : 1> [ S h a t t e r i n g c e r a m i c s ] <s f x> <n o r e p e a t : 1> [ S h a t t e r i n g m o n i t o r ] <s f x> [ M e l o n S p l a t ] <s f x> [ M e l o n S p l a t ]

我基本上正在尝试,现在我正在尝试仅删除括号内的空格[]。但我失败了,需要帮助,我还没有找到办法。

似乎每个字母的前后都有一个空格,我试图将其删除。

结果应该是这样的:

[Shattering Glass]

但其他东西意味着它看起来像这样,这就是最终结果

<sfx> <norepeat:1> [Shattering Glass]

例如。

RegEx 对此有好处吗,我正在使用在线工具。或者还有其他简单的方法吗?

标签: regexstringedit

解决方案


在支持 PCRE 正则表达式的正则表达式测试器中,您可以使用

(?:\G(?!\A)|[[<])[^][<>\s]*\K\s+(?=[^][<>]*[]>])

请参阅正则表达式演示

细节

  • (?:\G(?!\A)|[[<])- 上一次成功匹配的结束 ( \G(?!\A)) 或 ( |) a[<char ( [[<])
  • [^][<>\s]*]- 除, [, <,>和空格之外的任何 0+ 个字符
  • \K- 匹配重置运算符,从匹配内存缓冲区丢弃到目前为止匹配的文本
  • \s+- 1+ 空格
  • (?=[^][<>]*[]>])- 紧靠右边,必须有 0+ 个字符,而不是], [, <,>然后是>or ]

推荐阅读