[英]Regular Expressions: Match words between two given strings (no blank spaces or similar)
我正在嘗試獲得一個能夠在兩個給定字符串之間獲取單詞而不是空格的正則表達式,此時我有這個:
(?<=STR1)(?:\s*)(.*?)(?:\s*)(?=STR2)
我想用它來獲得以下結果:
WORD0 STR1 WORD1 WORD2 WORD3
WORD4 WORD5 STR2 WORD6
我想要一個匹配WORD1,WORD2,WORD3,WORD4,WORD5
的正則表達式
PS:我正在與python合作,謝謝
你不能用re
做到這一點,因為 1) 它不支持未知長度的后視模式,並且 2) 它不支持可用於匹配兩個字符串之間的字符串的\G
運算符。
所以,你可以做的是pip install regex
,然后使用
import regex
text = "WORD0 STR1 WORD1 WORD2 WORD3 \nWORD4 WORD5 STR2 WORD6"
print( regex.findall(r"(?<=STR1.*)\w+(?=.*STR2)", text, regex.DOTALL) )
# => ['WORD1', 'WORD2', 'WORD3', 'WORD4', 'WORD5']
請參閱Python 演示。 詳情:
(?<=STR1.*)
- 正后視匹配STR1
和緊鄰當前位置左側的任何零個或多個字符\w+
- 一個或多個單詞字符(?=.*STR2)
- 與當前位置右側的任何零個或多個字符和STR2
匹配的正向先行。 假設已知存在'STR1'
和'STR2'
,您可以編寫以下內容
str = "WORD0 STR1 WORD1 WORD2 WORD3\nWORD4 WORD5 STR2 WORD6"
rgx = r'\b(?!.*\bSTR1\b)\w+(?=.*\bSTR2\b)'
re.findall(rgx, str, re.S)
#=> ['WORD1', 'WORD2', 'WORD3', 'WORD4', 'WORD5']
re.S
(與re.DOTALL
相同)使句點匹配所有字符,包括行終止符。
正則表達式可以分解如下。
\b # match a word boundary
(?! # begin a negative lookahead
.* # match zero or more characters
\bSTR1\b # match 'STR1' with word boundaries
) # end negative lookahead
\w+ # match zero or more word characters
(?= # begin a positive lookahead
.* # match zero or more characters
\bSTR1\b # match 'STR2' with word boundaries
) # end positive lookahead
請注意,否定先行確保匹配的單詞 ( \w+
) 后面沒有跟隨着'STR1'
,在這種情況下,它前面必須有該字符串。
根據要求, \w+
可能會替換為[AZ]+\d+
或其他內容。
另請注意,表達式開頭的單詞邊界 ( \b
) 是為了避免匹配'TR1'
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.