我想从下面的文本中提取“物理”,但是我得到的价值是“无”。
能否请您解释我的代码中的错误?
我对正则表达式的逻辑如下
-> ^ [A-Z]-用于匹配以大写字母开头的任何单词的第一个字符。
-> [a-z] +-用于匹配任何后续的1个或多个字符
import re
text = "111 PCM Physics"
print(re.search(r'^[A-Z][a-z]+', text))
答案 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]+'