Python 如果在一种情况下后面没有数字,则正则表达式匹配字符串

Python 如果在一种情况下后面没有数字,则正则表达式匹配字符串,python,regex,Python,Regex,我有正则表达式: ^[-\s]+|Not Specified$ 我得到以下所有字符串的匹配: -- Not Specified - - - eV -270 - 1000 deg C 但我只想得到前三个 我不想听到这样的话: MTF, Depth, Focus, Blur sub-micron 您需要添加括号。\D与十进制数字以外的任何数字匹配: ^(\D+|Not Specified)$ 您甚至可以分解为:

我有正则表达式:

 ^[-\s]+|Not Specified$
我得到以下所有字符串的匹配:

--
Not Specified
- - -                    eV
-270 - 1000                    deg C
但我只想得到前三个

我不想听到这样的话:

 MTF, Depth, Focus, Blur
sub-micron

您需要添加括号。\D与十进制数字以外的任何数字匹配:

^(\D+|Not Specified)$
您甚至可以分解为:

^\D*$

您需要添加括号。\D与十进制数字以外的任何数字匹配:

^(\D+|Not Specified)$
您甚至可以分解为:

^\D*$

您可以匹配未指定的
,或者至少匹配一个
-
,而不匹配数字或换行符:

^(?:Not Specified|[^\r\n\d-]*-[^\r\n\d]*)$
解释

  • ^
    字符串的开头
    • (?:
      非捕获组
    • 未指定
      按字面匹配
    • |
    • [^\r\n\d-]*-
      匹配除数字、
      -
      或换行符以外的任何字符的0+倍,然后匹配
      -
    • [^\r\n\d]*
      匹配除换行符或数字以外的任何字符的0+倍
  • 关闭组
  • $
    字符串结尾


请注意,
\s
还匹配一个换行符,如果需要,您可以省略
\r\n
,这样被求反的字符类将与新行符匹配。

您可以匹配
未指定的
或至少匹配一个
-
,而不匹配数字或换行符:

^(?:Not Specified|[^\r\n\d-]*-[^\r\n\d]*)$
解释

  • ^
    字符串的开头
    • (?:
      非捕获组
    • 未指定
      按字面匹配
    • |
    • [^\r\n\d-]*-
      匹配除数字、
      -
      或换行符以外的任何字符的0+倍,然后匹配
      -
    • [^\r\n\d]*
      匹配除换行符或数字以外的任何字符的0+倍
  • 关闭组
  • $
    字符串结尾


请注意,
\s
还匹配一个换行符,如果需要,您可以省略
\r\n
,这样被求反的字符类将与新行符匹配。

您的正则表达式捕获字符串,如我不想匹配的“MTF、Depth、Focus、Blur”。更新了我的问题。@user3541631该模式与您的正则表达式捕获字符串“MTF、Depth、Focus、Blur”等我不想匹配的单词不匹配。更新了我的问题。@user3541631模式与这些单词不匹配