Regex 如何在正则表达式的负字符类中指定倍数?

Regex 如何在正则表达式的负字符类中指定倍数?,regex,Regex,我试图编写一个正则表达式来搜索除数字、*或-字符以外的任何内容,但有一点需要注意。我遇到的问题是,我需要能够找到三个或更少的数字,但不能找到四个或更多,尽管即使是一个*或-也不应该找到 这是我到目前为止(三场比赛)的成绩: 我不知道在哪里为数字插入{4,}(我已经尝试过了,但似乎在任何地方都不起作用),也不知道如何将其更改为我想要的 例如,在“Jack has*7771883874-sheep-”中,我希望它返回“Jack has 777 sheep”。或者在“2343klj-3***.net”

我试图编写一个正则表达式来搜索除数字、
*
-
字符以外的任何内容,但有一点需要注意。我遇到的问题是,我需要能够找到三个或更少的数字,但不能找到四个或更多,尽管即使是一个
*
-
也不应该找到

这是我到目前为止(三场比赛)的成绩:

我不知道在哪里为数字插入
{4,}
(我已经尝试过了,但似乎在任何地方都不起作用),也不知道如何将其更改为我想要的


例如,在
“Jack has*7771883874-sheep-”
中,我希望它返回
“Jack has 777 sheep”
。或者在
“2343klj-3***.net”
中,我希望它返回
“klj 3.net”
您可以使用以下正则表达式(替换为文本空间,
):

看。替换为
$1
(如果有,插入一个捕获的水平空白)

详细信息

  • (?:[-*\s]|\d{4,})+
    -匹配的一个或多个连续重复的
    • [-*\s]
      -0+空格、
      -
      或/和
      *
    • |
      -或
    • \d{4,}
      -4位以上
接下来,要删除所有前导和尾随空格,可以使用

^\s+|\s+$

并替换为空字符串
^\s+
匹配字符串开头的1+空格,而
\s+$
匹配字符串结尾的1+空格。

在这里的帮助下,这就是有效的方法。在一个正则表达式中完成这一切可能是不可能的,因为在开始和结束时不需要空格,而是在每个剩余分组之间需要空格

首先,使用
([-*\h]|\d{4,})+
查找并替换为空格


其次,使用
^\s*(.*)\s*$

您使用的是什么编程语言?这还不清楚。在正则表达式替换方法中尝试
[-*]+\d{4,}
。@Gurman我正在使用ICU或PCRE。这是因为您正在进行匹配,并且不可能在一次匹配操作中匹配不连续的文本。删除找到的匹配项。什么是编程语言?你应该解释你想要保留哪些空间,我在这里帮不了你,因为只有你知道这些要求。至于现在,不可能按您想要的方式处理所有空格,因为您的示例不一致。如果您使用
([-*\h]|\d{4,})+
并替换为空格,您将得到
klj 3.net
(开始时带有空格),我不知道为什么,但这并不是我想要的。通过在regex演示中尝试,我发现,
**duf87867*d777.com**
去掉了前面和后面的空格,但当我在计算机上使用它时,它仍然会在每一端留下空格。另外,我不知道为什么那些看起来像网址的会去掉所有的空格,而那些看起来像句子的会把它们夹在中间;我甚至需要那些看起来像网站地址的词来保持每个剩余词分组之间的空白。我对投入的大量精力表示赞赏,但没有任何回报。
^\s*(.*)\s*$
不起作用,请使用
^\s+\s+$
替换为空字符串。请投票/接受对您有帮助的答案。@WiktorStribiżew我也会尝试,但我在答案中发布的答案确实对我有用。你的意思是接受你的回答吗?对不起,我是新来的,不知道如何“接受”它,我没有看到任何按钮或任何东西?至于投票,我真的很感谢你到目前为止的所有帮助,但我还没有投票支持你的官方答案,因为它不符合我的要求。(续)@WiktorStribiżew(续)我确实看到您对其进行了编辑,删除了起始和结束空格,但在分组之间仍然没有空格,而且没有空格。请参考我最初的问题和我在那里给出的例子,以及我需要它们如何结束,特别是
2343klj-3***.net
需要变成
klj 3.net
,不幸的是,到目前为止,你的答案与此不符。@WiktorStribiżew我发现了你的开始-结束空格建议和我的不同。您的是为了第二次使用查找和替换。我的是第二次使用查找,因为它不一定需要查找和替换该部件。我将阅读这篇文章。很抱歉,你在我原来的问题上错了。请重读一遍。在我最初的问题中,我很清楚地想获得
klj 3.net
,中间有空格,我在讨论中多次重申,我一直提到的regex选项提供了这些空格,所以我不确定如何才能更清楚。我觉得如果我们在同一页上的话,很多这样来回的事情是可以避免的。我确实对你的评论投了赞成票,如果你把你的答案编辑成符合我要求的答案,我会投赞成票。(续)
(?:[-*\s]|\d{4,})+
^\s+|\s+$