正则表达式:匹配特定单词后的所有内容

时间:2015-05-19 13:07:57

标签: python regex

我正在使用Python,并希望在test之后匹配所有单词,直到遇到句点(句号)或空格。

text = "test : match this."

目前,我正在使用:

import re
re.match('(?<=test :).*',text)

以上代码与任何内容都不匹配。我需要match this作为输出。

4 个答案:

答案 0 :(得分:5)

您需要使用re.search,因为re.match尝试从字符串的边缘进行匹配。匹配直到遇到空格或句号。

re.search(r'(?<=test :)[^.\s]*',text)

要匹配所有字符,直到遇到句号,

re.search(r'(?<=test :)[^.]*',text)

答案 1 :(得分:2)

在一般情况下,正如标题所提到的,您可以捕获(.*)模式在您想要的任何模式之后使用除换行之外的任何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.DOTALLre.S标记(或在模式前添加(?s))编译正则表达式:

p = re.compile(r'test\s*:\s*(.*)', re.DOTALL)
p = re.compile(r'(?s)test\s*:\s*(.*)')

然而,it will retrun match this.。另请参阅regex demo

您可以在\.之后添加(.*)模式,以使正则表达式引擎在该行的最后.之前停止:

test\s*:\s*(.*)\.

Watch out for re.match()因为它只会在字符串的开头找一个匹配项(Avinash aleady指出了这一点,但这是一个非常重要的注释!)

请参阅regex demosample Python code snippet

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

如果您想确保test与整个单词匹配,请在其前面添加\b(不要从字符串文字中删除r前缀,或{{1} }将匹配一个BACKSPACE字符!) - '\b'

答案 2 :(得分:2)

如果您只是从字符串中获取子集,我不明白为什么要使用正则表达式。

这的方式相同:

public static final String

示例:

if line.startswith('test:'):
    print(line[5:line.find('.')])

正则表达式很慢,设计很难,而且很难调试。肯定有使用它的场合,但是如果你只是想在>>> line = "test: match this." >>> print(line[5:line.find('.')]) match this test:之间提取文字,那么我认为不是其中之一。

请参阅:https://softwareengineering.stackexchange.com/questions/113237/when-you-should-not-use-regular-expressions

为了获得更大的灵活性(例如,如果循环遍历字符串列表,希望在字符串的开头找到然后索引),请用{{替换索引中的5('test:'的长度) 1}}。

答案 3 :(得分:2)

测试后的所有内容,包括测试

test.*

测试后的所有内容,无需测试

(?<=video).*

Example here on regexr.com