繁体   English   中英

如何在包含至少一个下划线和大写字母的字符串中查找单词

[英]How to find words in a string containing at least one underscore and capital letters

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

  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_的子字符串)。

谢谢

你的正则表达式(\\S*[A-Z_]\\S*[_]\\S*)使用\\S*来匹配非空白字符并重复那么多次,这样你就可以匹配__A_

您可以使用:

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

说明

  • \\b字边界
  • [AZ]+匹配1+大写字符
  • _匹配下划线
  • [A-Z_]*匹配0次以上大写字母或下划线
  • [AZ]匹配大写字母
  • \\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演示

这应该工作:

import re

regex = r"\b([A-Z]+(?:_[A-Z]+){1,})\b"
test_str = "test_string TEST_STRING TEST_string _TEST_STRING_ TESTSTRING ANOTHER_TEST_STRING"
matches = re.findall(regex, test_str, re.MULTILINE)

输出:

>>> matches
['TEST_STRING', 'ANOTHER_TEST_STRING']

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM