[英]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.