我正在尝试编写一个Python正则表达式来捕获姓氏为Nakamoto的人的全名?您可以假设它之前的名字始终是一个以大写字母开头的单词。正则表达式必须符合以下条件:
'Satoshi Nakamoto'
'Alice Nakamoto'
'RoboCop Nakamoto'
但不是以下内容:
'satoshi Nakamoto' (where the first name is not capitalised)
'Mr. Nakamoto' (where the preceding word has a nonletter character)
'Nakamoto' (which has no first name)
'Satoshi nakamoto' (where Nakamoto is not capitalised)
我使用了以下正则表达式:[A-Z][a-z]+\sNakamoto
然而,这会捕获Satoshi Nakamoto
和satoshi Nakamoto
。我想知道我哪里出错了以及如何纠正它。这是我的代码:
import re #import regular expressions
#regular expression
NameSearch = re.compile(r'[A-Z][a-z]+\sNakamoto', re.I | re.VERBOSE)
# perform search on string
Result = NameSearch.search("Satoshi Nakamoto")
#Debug code to check if it found a match or not
print (Result == None)
if Result != None:
print (Result.group())
答案 0 :(得分:1)
re.I
表示忽略大小写,因此您使用的显式大写类无论如何都会匹配大小写。不要使用re.I
。另外,要匹配" RoboCop",您需要在名称中接受多个大写字母,因此您可能需要:
NameSearch = re.compile(r'\b[A-Z][a-zA-Z]+\sNakamoto\b', re.VERBOSE)
等。这也使用\b
作为单词边界检测器,因此您不会在fooBar Nakamoto
之类的字符串中途匹配。
答案 1 :(得分:0)
你的正则表达式实际上在这里工作正常,但它与“RoboCop Nakamoto”案例不符。
import re
def printMatch(name):
pat = re.compile(r'\b[A-Z][a-zA-Z]+\sNakamoto')
if pat.search(name):
print '"'+name+'" matches'
else:
print '"'+name+'" does not match'
printMatch('test satoshi Nakamoto test')
printMatch('test Satoshi Nakamoto test')
printMatch('test RoboCop Nakamoto test')
printMatch('test roboCop Nakamoto test')
输出是这样的:
"test satoshi Nakamoto test" does not match
"test Satoshi Nakamoto test" matches
"test RoboCop Nakamoto test" matches
"test roboCop Nakamoto test" does not match
答案 2 :(得分:0)
对我有用的那个:
df.ACTION.eq('opened').cumsum()
Out[352]:
0 1
1 1
2 2
3 2
4 3
5 3
6 4
7 4
8 5
9 5
10 5
11 5
12 6
13 6
14 7
15 8
16 9
17 9
18 9
Name: ACTION, dtype: int32
您可以在此处查看:Nginx Config 2