Java 带条件的Regexp查找子字符串

Java 带条件的Regexp查找子字符串,java,regex,string,Java,Regex,String,我尝试编写regexp来查找字符串中带有减号的数字 此数字在开始或结束数字上有一个减号(-) 此子字符串可以以空格开头或/和结尾,也可以以字符串开头或结尾 另一个字符串可以包含此子字符串,但没有空格,需要排除此字符串 regexp应该与这些字符串匹配 abc ghhkjl -123 123- gfdhs kljf fdsg -123 fdjol jklp 123- ljfds -123 123- abc ghhkjl-123 123-gfdhs kljf fdsg -123fdjol jklp1

我尝试编写regexp来查找字符串中带有减号的数字

  • 此数字在开始或结束数字上有一个减号(-)
  • 此子字符串可以以空格开头或/和结尾,也可以以字符串开头或结尾
  • 另一个字符串可以包含此子字符串,但没有空格,需要排除此字符串
  • regexp应该与这些字符串匹配

    abc ghhkjl -123 123- gfdhs kljf fdsg -123 fdjol jklp 123- ljfds -123 123- abc ghhkjl-123 123-gfdhs kljf fdsg -123fdjol jklp123- ljfds 请帮忙

    听起来你可以用它来强制被空格、开始或结束包围

    (?<!\S)(?:\d+-|-\d+)(?!\S)
    
    (?
    


    上方的
    \S
    匹配的字符不是空格(否定
    \S
    )。

    作为一种替代方法,如果要查找单个数字,可以在数字的左侧和右侧重复匹配的单词字符和水平空格字符,该数字的左侧或右侧都有减号:

    ^(?:\h*\w+\h+)*(\d+-|-\d+)(?:\h+\w+\h*)*$
    
    • ^
      字符串的开头
    • (?:
      非捕获组
      • \h*
        在开头匹配可选的水平空白字符
      • \w+\h+
        匹配1+个单词字符,后跟1+个水平空格字符
    • )*
      关闭分组并重复0多次
    • (\d+-\d+
      捕获组1,带减号的数字
    • (?:
      非捕获组
      • \h+\w+
        匹配1+水平空格字符和1+单词字符
      • \h*
        在末尾匹配可选的水平whitspace字符
    • )*
      关闭分组并重复0多次
    • $
      字符串结尾

    < /P>匹配完整字符串的正确思想!如果有任何答案解决了你的问题,你可以考虑点击。✓ 在它的左边,你认为这是有帮助的。

    ^(?:\h*\w+\h+)*(\d+-|-\d+)(?:\h+\w+\h*)*$