Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 正则表达式:匹配特定单词后的所有内容_Python_Regex - Fatal编程技术网

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

我正在使用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 = "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).*