簡體   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