遍历字符串查找模式?
我正在做一个Python练习题,内容是要识别一些模式。比如说,有一个模式是要数数被多个x包围的“oo”。
line = "xooxxxxooxxxxoxoxxxxoxoxxxxxxxoxoxxoooxxxxxxxxxxxx"
被x包围的“oo”只是几个模式中的一个。我尝试用for循环来实现,但很尴尬的是没成功。有没有什么方法可以遍历一个字符串,找到特定的模式并把它们加到一个计数变量里?如果我能学会这个,我相信我能找到其他的模式来完成这个练习。:)
谢谢!
我还尝试了
for "oo" in line:
count += 1
但它不管用。我对循环真的很糟糕,抱歉。
我期望的输出是这个模式的计数:被x包围的2个o。
4 个回答
0
我不想直接给你答案,但你可以试试 split
这个函数,它可能对你有帮助。你可以在这里找到相关的资料:http://docs.python.org/2/howto/regex.html#splitting-strings
test = "xxxxooxxxxoooxxxx"
test.split("oo")
这段代码的返回结果是 ['xxxx', 'xxxx', 'oxxxx']
希望这些信息对你有帮助。换句话说,如果你有连续的字符串,其中一个以 'x' 结尾,另一个以 'x' 开头,那么你就可以算作一次出现。
0
你的代码应该会出现一个 SyntaxError
错误,因为你 不能给字面量赋值
。你本来是想遍历字符串中的所有 'oo'
,但实际上并不是这样,也不应该这样。
你可能想的是遍历字符串,看看里面有多少个 'oo',但在这种情况下是做不到的。
有一个很棒的内置函数叫 count()
,它的作用就是... 计数。使用方法是:
yourstring.count(str) # str here is what you want to count,
# yourstring is where you are counting
它会返回一个整数,所以你需要的代码是:
>>> line = "xooxxxxooxxxxoxoxxxxoxoxxxxxxxoxoxxoooxxxxxxxxxxxx"
>>> line.count('oo')
3
2
首先,你这里有一个字面量("oo"
),但你需要一个变量,这样你的循环才能正常工作:
for "oo" in line:
# ^literal not allowed here
如果你想用循环来做这样的事情,你可能想要遍历一下索引,检查字符串的一部分,看看它是否和某个特定的子字符串匹配:
count = 0
for i in range(len(line)):
if line[i:i+4] == 'xoox':
count += 1
注意,这样做绝对不是“符合Python风格”的写法。一个符合Python风格的解决方案是:
line.count('xoox') # Batteries included :-)