正则表达式结果为无

时间:2019-05-06 10:07:29

标签: python regex python-3.x

我想从下面的文本中提取“物理”,但是我得到的价值是“无”。

能否请您解释我的代码中的错误?

我对正则表达式的逻辑如下

-> ^ [A-Z]-用于匹配以大写字母开头的任何单词的第一个字符。

-> [a-z] +-用于匹配任何后续的1个或多个字符

import re
text = "111   PCM   Physics"
print(re.search(r'^[A-Z][a-z]+', text))

3 个答案:

答案 0 :(得分:1)

如果您想让正则表达式模式在文本中找到最后一个大写单词,请使用以下命令:

[A-Z][a-z]+$

话虽这么说,re.match这里有一个警告。由于我们正在调用最终锚点$,因此re.match将尝试匹配整个输入字符串,因此我们应使用以下代码:

text = "111   PCM   Physics"
m = re.match(r'^.*([A-Z][a-z]+)$', text)
print(m.group(1))

但是请注意,我们很容易在这里使用re.split并将输入文本分割为空格:

parts = re.split(r'\s+', text)
print(parts[2])

答案 1 :(得分:1)

下面的代码为我工作,从给定的文本中提取“物理”。

text = "111 PCM Physics"
if "Physics" in text:
    print("Yes, Physics present in given text ")
    s = text.find("Physics")
    print(text[s:s+7]) # 7 is for lenght of "Physics"
else:
    print( "No, Physics does not present in given text " )

答案 2 :(得分:1)

这是因为模式中的^会检查[A-Z]是否在字符串的开头。因此,在给定的输入文本text = "111 PCM Physics"中,起始字符串为111,因此模式与单词Physics不匹配。

根据文档

  

^在行首匹配。

这意味着当模式以^开头时,编译器会寻找以模式开头的字符串。例如,在r'^[A-Z][a-z]+'中,[A-Z]本身将匹配诸如Physics,Ankit之类的起始大写字母,因为^在其之前。

您可以考虑以下不带脱字符号的字符。这将匹配输入文本中任何地方的大写单词。

pattern = r'[A-Z][a-z]+'