Python Regex结果为none
我想从下面的文本中提取“物理”,但我得到的值是“无” 你能解释一下我代码中的错误吗 我对regex的逻辑如下 -->^[A-Z]-用于匹配以大写字母开头的任何单词的第一个字符 -->[a-z]+-用于匹配任何后续1个或多个字符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]+$ 也就是说,这里
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]+
。但您不希望从行首而不是行尾进行匹配。因此,您需要使用行尾锚点$
,这样它将匹配以大写字母开头并在行尾结束的单词。因此,您在^
的工作方式上有点错误。希望现在就清楚了。如果有任何进一步的疑问,请告诉我。