【问题标题】:Regex to match only uppercase strings with or without numbers in specific format正则表达式仅匹配带有或不带有特定格式数字的大写字符串
【发布时间】:2021-09-02 14:10:42
【问题描述】:

我有以下字符串列表:

list1 = ['KVC Company','this is a sample', 'TEL 555-555-5555', 'DATE: 05/12/2021', 
'50 KG LOADER', 'COMPUTER SCIENCE', '13445556 AAA', 'MONDAY', 'AMT: 60', 'plenty', 
'data sources','USA 00000','EXM: J. Smith', 'X', 'FH']

我正在使用以下正则表达式来过滤列表:

r'\b[A-Z]{3,}(?:\s+[A-Z]{3,})*\b.*$'

此正则表达式匹配所有以大写字母开头的字符串,但不考虑其余字母。

我得到如下输出,

output = ['KVC Company', 'TEL 555-555-5555', 'DATE: 05/12/2021', 'LOADER', 
'COMPUTER SCIENCE', 'AAA','MONDAY', 'AMT: 60', 'USA 00000','EXM: J. Smith']

我想要的输出如下图,

['50 KG LOADER', 'COMPUTER SCIENCE', 'MONDAY' ]

仅包含完全大写且没有任何符号仅包含不超过 2 位数字的字符串。

如何过滤掉所有其他字符串并仅返回完全大写的字符串,其中只有 2 位数字,并且在字符串中的任何位置都没有任何符号,如 :,/,- 和小写字母。

【问题讨论】:

  • 为什么不13445556 AAA?你的规则不够具体
  • 为什么不USA 00000
  • 您可以使用^(?=.*[A-Z]{4})[A-Z\d]+(?: [A-Z\d]+)*$ 获得这些匹配项,但是如果可以有前导和尾随空格regex101.com/r/W9v8gz/1,则应该至少有4个大写字符而不是3个regex101.com/r/coDqJv/1或更宽/跨度>
  • 可能是:^(?!.*\d{3})(?=.*[A-Z]{3})[A-Z\d ]+$
  • @AnjaliA 你已经更新了你的问题,在这种情况下,anubhava 的答案似乎更好,因为它考虑了not more than 2 digits

标签: python regex text


【解决方案1】:

你可以在 Python 中使用这个正则表达式:

^(?!.*\d{3})(?=.*[A-Z]{3})[A-Z\d ]+$

RegEx Demo

正则表达式详细信息:

  • ^:开始
  • (?!.*\d{3}):否定前瞻断言我们在任何地方都没有 3 位数字
  • (?=.*[A-Z]{3}):肯定的前瞻断言我们在某处至少有 3 个连续的大写字母
  • [A-Z\d ]+:匹配1+个大写字母或数字或空格
  • $:结束

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-17
    • 1970-01-01
    • 1970-01-01
    • 2019-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-19
    相关资源
    最近更新 更多