我想匹配包含
的字符串中的所有单词例如(这是我得到的最好结果):
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)
我想从搜索方法中获得的单词是:
但是我正在获得
谢谢
答案 0 :(得分:3)
您正则表达式(\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']
请参见regex demo | Python demo
答案 1 :(得分:0)
这应该有效:
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']