【发布时间】: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。