Regex 正则表达式,用于按特定规则匹配不包括数字的文本字符串

Regex 正则表达式,用于按特定规则匹配不包括数字的文本字符串,regex,Regex,我有一些条件: ALFA ROMEO 4C BMW X7 BLACK BMW X7 BLACK COLOUR BMW X7 BMW BMW X 7 BMW 7 SERIES BMW 7SERIES BMW 7S BMW (X7) 我想得到: ALFA ROMEO 4C BMW X7 BLACK BMW X7 BLACK COLOUR BMW X7 BMW BMW X BMW BMW 7SERIES BMW 7S BMW 如果数字和字母不在一起,那么图案应该在它们前面 如果字母[A-Z]后没有

我有一些条件:

ALFA ROMEO 4C
BMW X7 BLACK
BMW X7 BLACK COLOUR
BMW X7
BMW
BMW X 7
BMW 7 SERIES
BMW 7SERIES
BMW 7S
BMW (X7)
我想得到:

ALFA ROMEO 4C
BMW X7 BLACK
BMW X7 BLACK COLOUR
BMW X7
BMW
BMW X
BMW
BMW 7SERIES
BMW 7S
BMW
  • 如果数字和字母不在一起,那么图案应该在它们前面
  • 如果字母
    [A-Z]
    后没有字母
    [^A-Z]
    和空格,则图案应位于字母
    [A-Z]
    之前

  • 有点复杂,但这可能有效:

    ^[A-Z ]+?(\d[A-Z]|[A-Z]\d).*|^[A-Z ]+
    
    您的匹配项将为
    $0

    ALFA ROMEO 4C
    BMW X7 BLACK
    BMW X7 BLACK COLOUR
    BMW X7
    BMW
    BMW X
    BMW
    BMW 7SERIES
    BMW 7S
    BMW
    

    有点复杂,但这可能会起作用:

    ^[A-Z ]+?(\d[A-Z]|[A-Z]\d).*|^[A-Z ]+
    
    您的匹配项将为
    $0

    ALFA ROMEO 4C
    BMW X7 BLACK
    BMW X7 BLACK COLOUR
    BMW X7
    BMW
    BMW X
    BMW
    BMW 7SERIES
    BMW 7S
    BMW
    

    如果支持正向前瞻,您可以使用开始匹配
    [a-Z]
    ,并在右侧不包含数字时重复匹配0+次
    [a-Z0-9]+

    ^[A-Z]+(?: (?![0-9]+\b)[A-Z0-9]+)*
    
    解释

    • ^
      字符串的开头
    • [A-Z]+
      匹配1+次字符A-Z
    • (?:
      非捕获组
      • (?![0-9]+\b)`
        匹配空格,断言右边的不仅仅是数字
      • [A-Z0-9]+
        匹配1+乘以字符A-Z或数字
    • )*

    没有列出任何语言,但例如使用Javascript:

    常量模式=/^[A-Z]+(?:(?![0-9]+\b)[A-Z0-9]+)*/; [ “阿尔法罗密欧4C”, “宝马X7黑色”, “宝马X7黑色”, “宝马X7”, “宝马”, “宝马X7”, “宝马7系”, “宝马7系”, “宝马7S”, “宝马(X7)”
    ].forEach(str=>console.log(str.match(pattern)[0])如果支持正向前瞻,则可以使用开始匹配
    [a-Z]
    ,并在右侧不包含数字时重复匹配0+次
    [a-Z0-9]+

    ^[A-Z]+(?: (?![0-9]+\b)[A-Z0-9]+)*
    
    解释

    • ^
      字符串的开头
    • [A-Z]+
      匹配1+次字符A-Z
    • (?:
      非捕获组
      • (?![0-9]+\b)`
        匹配空格,断言右边的不仅仅是数字
      • [A-Z0-9]+
        匹配1+乘以字符A-Z或数字
    • )*

    没有列出任何语言,但例如使用Javascript:

    常量模式=/^[A-Z]+(?:(?![0-9]+\b)[A-Z0-9]+)*/; [ “阿尔法罗密欧4C”, “宝马X7黑色”, “宝马X7黑色”, “宝马X7”, “宝马”, “宝马X7”, “宝马7系”, “宝马7系”, “宝马7S”, “宝马(X7)”
    ].forEach(str=>console.log(str.match(pattern)[0])宝马7系
    来自哪里?我只看到
    BMW 7series
    @MonkeyZeus,fixed,thx@anubhava,因为“7”和“SERIES”(我的问题中的第1段)之间有空格。
    BMW 7series
    来自哪里?我只看到
    BMW 7series
    @MonkeyZeus,fixed,thx.@anubhava,因为“7”和“SERIES”(我的问题中的第一段)之间有空格。thanx,你的图案很好,但是如何让它与非
    [a-z]
    符号一起工作呢?我猜
    \b
    有问题。也许你可以试试
    ^[^\d\s]+(?:(?![0-9]+\b)\s+*。
    我的意思是:,它应该抓住最后一个字符串。如果字符串看起来像,模式应该在“BMW”之前,因为它不是西里尔文字。我使用这个版本的模式:。你的模式很好,thanx,但是如何使它与非
    [a-z]
    符号一起工作?我猜
    \b
    有问题。也许你可以试试
    ^[^\d\s]+(?:(?![0-9]+\b)\s+*。
    我的意思是:,它应该抓住最后一个字符串。若字符串看起来像,那个么模式应该在“BMW”之前,因为它不是西里尔文字。