首页 > 解决方案 > 如何在包含至少一个下划线和大写字母的字符串中查找单词

问题描述

我想匹配包含的字符串中的所有单词

  1. 至少一个下划线(但单词既不能以其开头也不能以它结尾)
  2. 至少两个大写字母
  3. 所有字母必须大写。

例如(这是我得到的最好结果):

test_string = "test_string TEST_STRING TEST_string _TEST_STRING_ TESTSTRING ANOTHER_TEST_STRING"
p = re.compile("(\S*[A-Z_]\S*[_]\S*)") 
p.search(test_string)

我想从搜索方法中获得的词是:

  1. TEST_STRING(第二个词,不是_TEST_STRING_的子串)
  2. ANOTHER_TEST_STRING

但我正在获得

  1. TEST_STRING
  2. TEST_STRING(_TEST_STRING_ 的子字符串)。

谢谢

标签: pythonregex

解决方案


您正则表达式(\S*[A-Z_]\S*[_]\S*)使用\S*它将匹配非空白字符并重复 0+ 次,因此您也可以匹配__A_

您可能会使用:

\b[A-Z]+_[A-Z_]*[A-Z]\b

解释

  • \b字边界
  • [A-Z]+匹配 1+ 个大写字符
  • _匹配下划线
  • [A-Z_]*匹配 0+ 次大写字符或下划线
  • [A-Z]匹配一个大写字符
  • \b字边界

re.search将返回正则表达式匹配的第一个位置。您可以改用findall

import re
test_string = "test_string TEST_STRING TEST_string _TEST_STRING_ TESTSTRING ANOTHER_TEST_STRING"
p = re.compile(r"\b[A-Z]+_[A-Z_]*[A-Z]\b") 
print(re.findall(p,test_string))

结果

['TEST_STRING', 'ANOTHER_TEST_STRING']

查看正则表达式演示| Python 演示


推荐阅读