Python 正则表达式:匹配特定单词后的所有内容
我正在使用Python,希望匹配Python 正则表达式:匹配特定单词后的所有内容,python,regex,Python,Regex,我正在使用Python,希望匹配test之后的所有单词,直到遇到句点(句号)或空格 text = "test : match this." re.search(r'(?<=test :)[^.\s]*',text) 目前,我正在使用: import re re.match('(?<=test :).*',text) 重新导入 re.match(“(?您需要使用re.search,因为re.match尝试从字符串的开头进行匹配。要匹配,直到遇到空格或句点为止 text = "te
test
之后的所有单词,直到遇到句点(句号)或空格
text = "test : match this."
re.search(r'(?<=test :)[^.\s]*',text)
目前,我正在使用:
import re
re.match('(?<=test :).*',text)
重新导入
re.match(“(?您需要使用re.search,因为re.match
尝试从字符串的开头进行匹配。要匹配,直到遇到空格或句点为止
text = "test : match this."
re.search(r'(?<=test :)[^.\s]*',text)
re.search(r'(?在一般情况下,如标题所述,您可以使用(.*)
模式在您想要的任何模式后捕获除换行符以外的任何0个或更多字符:
import re
p = re.compile(r'test\s*:\s*(.*)')
s = "test : match this."
m = p.search(s) # Run a regex search anywhere inside a string
if m: # If there is a match
print(m.group(1)) # Print Group 1 value
如果希望
跨多行匹配,请使用re.DOTALL
或re.S
标志编译正则表达式(或在模式之前添加(?S)
):
但是,请参见
您可以在(.*)
之后添加\.
模式,使正则表达式引擎在该行最后一个
之前停止:
test\s*:\s*(.*)\.
因为它只会在字符串的开头寻找匹配项(Avinash aleady指出了这一点,但这是一个非常重要的注释!)
见附录a和a:
如果要确保test
作为一个完整的单词匹配,请在其前面添加\b
(不要从字符串文本中删除r
前缀,否则'\b'
将匹配一个退格字符!)-r'\btest\s*:\s*(*)\.
如果只是从字符串中获取一个子集,我不明白为什么要使用正则表达式
其工作原理相同:
if line.startswith('test:'):
print(line[5:line.find('.')])
例如:
>>> line = "test: match this."
>>> print(line[5:line.find('.')])
match this
正则表达式很慢,设计起来很难,调试起来也很困难。当然也有使用它的时候,但是如果你只是想提取test:
和
之间的文本,那么我不认为这是一种情况
见:
为了获得更大的灵活性(例如,如果您正在循环查找字符串开头的字符串列表,然后将其索引出来),请将索引中的5(test:'的长度)替换为len(str_you_looked)
测试后的所有内容,包括test
test.*
一切都经过测试,没有测试
(?<=test).*
(?您的表达式是否工作不正常?如果是这种情况,请提供它产生的输出。请指定您期望的输出:“匹配”、“匹配此”或“匹配此”。请告诉我们它到底是如何工作的。好吧,我使用的不工作:-)你想匹配一个特定的单词子集吗?因为如果你只想在测试后提取所有单词,你可以使用子集。你需要使用re.search
。像往常一样,匹配从一开始就尝试匹配。我完全同意。我通常尽量避免使用正则表达式。但我需要在一个大的num中匹配许多其他字符串网页的ber。它们不同吗?它们不能以相似的方式显示吗?只是浏览了您提供的链接。非常有趣。您让我重新考虑了我的方法!!@Amith我同意,没有附加条件:)我自己喜欢提供两种解决方案,基于正则表达式和非正则表达式。这次不需要。@Amith,没问题。正则表达式是很容易被滥用的东西之一。这应该是公认的答案,快速而简单
(?<=test).*