Python Regex结果为none

Python Regex结果为none,python,regex,python-3.x,Python,Regex,Python 3.x,我想从下面的文本中提取“物理”,但我得到的值是“无” 你能解释一下我代码中的错误吗 我对regex的逻辑如下 -->^[A-Z]-用于匹配以大写字母开头的任何单词的第一个字符 -->[a-z]+-用于匹配任何后续1个或多个字符 import re text = "111 PCM Physics" print(re.search(r'^[A-Z][a-z]+', text)) 如果希望正则表达式模式查找文本中最后一个大写的单词,请使用以下命令: [A-Z][a-z]+$ 也就是说,这里

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

你能解释一下我代码中的错误吗

我对regex的逻辑如下

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

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

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

如果希望正则表达式模式查找文本中最后一个大写的单词,请使用以下命令:

[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])

下面的代码帮助我从给定的文本中提取“物理”

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 " )

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

根据文件

^在行首匹配

这意味着当模式以
^
开头时,编译器将查找以模式开头的字符串。例如,在
r'^[A-Z][A-Z]+'
[A-Z]中,由于前面有
^
,因此[A-Z]本身将匹配起始大写字母,如Physics,Ankit

你可以在没有插入符号的情况下考虑下面的内容。这将匹配输入文本中任何大写的单词

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

将您的正则表达式更改为
[A-Z][A-Z]+$
@PushpeshKumarRajwanshi您能解释一下我的正则表达式逻辑错误的原因吗?
^
表示正则表达式应该从头开始搜索。如果您想在此处匹配
物理
(不匹配
PCM
请注意),请使用[A-z]+$您选择的开始锚定
^
,这意味着您的匹配需要从行的最开始开始,然后需要匹配一个大写字母,因为您有
[A-z]
而且它需要匹配一个或多个小写字母,因为您有这个
[a-z]+
。但您不希望从行首而不是行尾进行匹配。因此,您需要使用行尾锚点
$
,这样它将匹配以大写字母开头并在行尾结束的单词。因此,您在
^
的工作方式上有点错误。希望现在就清楚了。如果有任何进一步的疑问,请告诉我。