首页 > 解决方案 > 正则表达式匹配某个单词的每次出现但被某些字符打断

问题描述

我不是程序员,但我正在尝试编写一些 RegEx。我只学到了一些基础知识,其他的不多。我的意图如下:我有一些格式化的文本,其中有一些单词出现uses)。我想把所有东西都放在后面uses)(和“使用”),但是如果匹配:或其他出现的uses),以及第一个空格(以便匹配以非空格字符开始),则匹配必须停止.

示例文本:

Second Wind (Recharge 5-6) (1/1 uses). The Veteran can use a bonus action to regain hit points equal to 14 (1d10 + 9).

Spellcasting.
3/day each: Jump (3/3 uses), Darkness (3/3 uses), Burning Hands (3/3 uses)

Spellcasting.
1st level (4 slots): Ray Of Sickness, Witch Bolt, Tasha's Hideous Laughter (4/4  uses)

RegEx 应该分别给我:

Second Wind (Recharge 5-6) (1/1 uses)
Jump (3/3 uses)
Darkness (3/3 uses)
Burning Hands (3/3 uses)
Ray Of Sickness, Witch Bolt, Tasha's Hideous Laughter (4/4  uses)

直到现在我想出了这个代码。

[^:,\s](.*?uses\))

这几乎可以正确匹配所有内容,但不幸的是,匹配并没有停止:,因此甚至匹配了我不想匹配的其他文本,得到了这个而不是我在这里写的:

Second Wind (Recharge 5-6) (1/1 uses)
3/day each: Jump (3/3 uses)
Darkness (3/3 uses)
Burning Hands (3/3 uses)
1st level (4 slots): Ray Of Sickness, Witch Bolt, Tasha's Hideous Laughter (4/4  uses)

我怎样才能摆脱那些我不需要的额外文本?这是带有代码的示例https://regexr.com/4sbtf

标签: java

解决方案


您当前遇到的问题[^:,\s](.*?uses\))是该序列.*?匹配任何字符序列,最终包括:. 您想要做的是将通配符替换为.“除 : 之外的任何字符”,即[^:].
[^:,\s]([^:]*?uses\))从而达到你想要的。


推荐阅读