python正则-- re模块
匹配数字相关
'.' 默认匹配除\n之外的任意一个字符,若指定flag DOTALL,则匹配任意字符,包括换行
'^' 匹配字符开头,若指定flags MULTILINE,这种也可以匹配上(r"^a","\nabc\neee",flags=re.MULTILINE)
'$' 匹配字符结尾,或e.search("foo$","bfoo\nsdfsf",flags=re.MULTILINE).group()也可以
'*' 匹配*号前的字符0次或多次,re.findall("ab*","cabb3abcbbac") 结果为['abb', 'ab', 'a'],如果想控制一个组,可以加()
'+' 匹配前一个字符1次或多次,re.findall("ab+","ab+cd+abb+bba") 结果['ab', 'abb']
'?' 匹配前一个字符1次或0次,常用来表示可有可无(出现1次或0次)的一个符号
'{m}' 匹配前一个字符m次
'{n,m}' 匹配前一个字符n到m次,re.findall("ab{1,3}","abb abc abbcbbb") 结果'abb', 'ab', 'abb'] ,可以替代'*' '+' '?' 为:{0,} {1,} {0,1}
'[]' 字符集,匹配[]中的字符(其中的字符是或的关系),其中的字符可以一一列出,也可以给出范围,元字符在其中失去意义,除非元字符前面加了反斜杠。有几种特殊的元字符依然有意义:表示范围的'-', 取反的'^',和'\'
>>> re.search('[a|b]','aabcd').group() # search方法在字符集匹配时只匹配一次
'a'
>>> re.search('[a|b]+','aabcd'). # '+' 匹配一次或多次字符集中的内容
'aab' >>> re.findall('[a|b]','aabcd')
['a', 'a', 'b']
>>>
'|' 匹配|左或|右的字符,re.search("abc|ABC","ABCBabcCD").group() 结果'ABC'
'(...)' 分组匹配,re.search("(abc){2}a(123|456)c", "abcabca456c").group() 结果 abcabca456c。 分组匹配时,findall只返回分组括号中的内容,返回到一个列表,分组作用:为了在已经匹配到的内容中再去提取过滤内容,有几个括号就提取几次
'\' 1.后面跟元字符去除特殊功能,2.跟普通字符实现特殊功能(\d:匹配数字),3.引用序号对应的字组所匹配的字符串
>>> re.search(r"(whisky)(\d+)com\2","whisky211985com211985").group()
'whisky211985com211985'
'\A' 效果和^是一样的,只从字符开头匹配,re.search("\Aabc","alexabc") 是匹配不到的
'\Z' 匹配字符结尾,同$
'\d' 匹配单个 数字0-9
'\D' 匹配非数字
'\w' 匹配[A-Za-z0-9],注意:不能匹配空格、特殊字符等
'\W' 匹配非[A-Za-z0-9]
'\s' 匹配空白字符、\t、\n、\r、\f、\v, re.search("\s+","ab\tc1\n3").group() 结果 '\t'
‘\b’ 匹配一个单词边界,即单词和空格(或特殊字符)间的位置,字符串开头结尾及空格回车等的位置,不会匹配空格符本身
>>> import re
>>> re.findall('abc\b','asdas abc ')
[] # 没有声明原生字符串或转义,所以结果为空
>>> re.findall('abc\\b','asdas abc ')
['abc']
>>> re.findall(r'abc\b','asdas abc ')
['abc']
>>> re.findall(r'abc\b','asdas abc*')
['abc'] # 特殊字符作为单词边界 >>> re.findall(r'i\b','i miss iou')
['i']
>>> re.findall(r'i\b','imiss iou')
[]
>>> re.findall(r'\bi',' imiss iou') # 以空格为单词边界
['i', 'i']
>>> re.findall(r'\bi','imiss iou') #以字符串开头和空格为单词边界
['i', 'i']
例子
'(?P<name>...)' 分组匹配 re.search("(?P<province>[0-9]{4})(?P<city>[0-9]{2})(?P<birthday>[0-9]{4})","371481199306143242").groupdict("city") 结果{'province': '3714', 'city': '81', 'birthday': '1993'}
注意:?P为固定语法格式
写法:(?P<组名>正则表达式),输出(以字典的形式输出):{'组名':'正则匹配的结果'}
(*|+|?|{})? : *、+、?、{}后面加?使用非贪婪模式
正则表达式中 .*? 代表什么?
解答:
点代表的是任意字符。* 代表的是取 0 至 无限长度问号代表的是非贪婪模式。三个链接在一起是取尽量少的任意字符,一般不会这么单独写。 用法:
他大多用在:.*?a 解释:
就是取前面任意长度的字符,到底一个 a 出现,匹配如下q@wer_qwerqweraljlkjlkjlkj, 得到:q@wer_qwerqwera 这部分,如果匹配不到后面的 a 字符,则匹配为空。
注意,re的若干方法:
match方法是从字符串开头往后匹配(用的少)
例:
res = re.match('^Chen', 'Chenronghua123') 语法:pattern,string
print(res)
#输出:<_sre.SRE_Match object; span=(0, 4), match='Chen'>
#res = re.match('r.+', 'Chen123ronghua123') #匹配结果为空,match从字符串开头开始匹配
# res = re.search('r.+', 'Chen123ronghua123') #search 从整个文本中搜索
# print(res.group())
# 结果:ronghua
#如果匹配不到返回None,即res为None,res.group()会报错
常用方法如下:
1.search是从整个文本中搜索,匹配到一个就返回
2.findall是从整个文本中搜索,贪婪匹配,如果匹配到多个全部返回,所有结果都放在一个列表中,findall没有group方法
>>> re.findall('[a-z]','wwwa.d')
['w', 'w', 'w', 'a', 'd']
>>> re.findall('[0-9]','w0w3w4a.99d')
['', '', '', '', ''] >>> re.findall('\d','w0w3w4a.99d')
['', '', '', '', '']
>>> re.findall('\d', 'aa22ww2qq123qwe333')
['', '', '', '', '', '', '', '', '']
>>> re.findall('\d\d', 'aa22ww2qq123qwe333')
['', '', '']
>>> re.findall('\d+', 'aa22ww2qq123qwe333')
['', '', '', ''] >>> re.findall('\w','w0w3w4a.99d')
['w', '', 'w', '', 'w', '', 'a', '', '', 'd']
>>> re.findall('\s','w0w3 w4a.99d')
[' ']
findall结合字符集例子
findall常和分组()搭配使用,分组后利用findall方法只返回分组括号中的数据,爬虫常用,也可取消这种功能,例:
>>> re.findall('www.(?:baidu|123).com','asd www.baidu.com') # 在括号的组中加上'?:'即可匹配全部内容,而非仅是分组中的内容
['www.baidu.com']
findall的分组、无分组:
>>> string = 'hello sky asd sky age sky qwe 19w'
>>>
>>> r = re.findall('a\w+', string)
>>> print(r)
['asd', 'age']
>>> r = re.findall('a(\w+)', string) #此时findall作用相当于groups,但groups把结果放入元组,findall则放入列表中
>>> print(r)
['sd', 'ge']
>>>
>>> string = 'hello sky asd sky age sky qwe 19w'
>>> r = re.findall('(a)(\w+)', string)
>>> print(r)
[('a', 'sd'), ('a', 'ge')] # string从前到后每次匹配到的字符串都放入元组,所有匹配到的内容都放入列表
>>>
>>> r = re.findall('(s)(\w+)(y)', string) # 相当于把groups中的内容放到一起
>>> print(r)
[('s', 'k', 'y'), ('s', 'k', 'y'), ('s', 'k', 'y')] #每个组中都有一个元素,共三个元素
>>>
>>> string = 'hello whisky asd whisky age whisky qwe 19w'
>>> r = re.findall('(i)(\w+(k))(y)', string) #第一个元素是i 第二个:sk 第三个k 第四个:y,有几个括号就提取几次,取出的元素一次放入元组中,最后再把每次匹配的结果放入列表 ,另外,这里不支持re.findall('(i)(\w+(k))(?P<n1>y)', string)模版组名,用finditer可以支持
>>> print(r)
[('i', 'sk', 'k', 'y'), ('i', 'sk', 'k', 'y'), ('i', 'sk', 'k', 'y')]
>>>
>>> string = 'hello whisky asd whisky age whisky qwe 19w'
>>> r = re.finditer('(i)(\w+(k))(?P<n1>y)', string) # 迭代方式可匹配组名
>>> for i in r:
... print(i,i.group(),i.groups(),i.groupdict())
...
<_sre.SRE_Match object; span=(8, 12), match='isky'> isky ('i', 'sk', 'k', 'y') {'n1': 'y'}
<_sre.SRE_Match object; span=(19, 23), match='isky'> isky ('i', 'sk', 'k', 'y'){'n1': 'y'}
<_sre.SRE_Match object; span=(30, 34), match='isky'> isky ('i', 'sk', 'k', 'y'){'n1': 'y'}
>>>
findall 分组,无分组
findall:注意两个问题
1.findall无分组时匹配所有符合pattern的字符串
>>> n = re.findall('\d+\w\d+','a2b3c4d5')
>>> print(n)
['2b3', '4d5'] # 结果不是3c4,可知findall方法是从前向后逐个匹配,匹配到结果2b3,则去掉2b3,再继续向后匹配
>>> 2.匹配到空的内容会返回
>>> n = re.findall('','a2b3c4d5')
>>> print(n)
['', '', '', '', '', '', '', '', '']
>>> 3.指定分组次数时,因为只有一个括号(分组),所以只匹配最后一次内容
>>> a = 'whisky'
>>> n = re.findall('(\w)(\w)(\w)(\w)', a) #表示分4组,全部返回
>>> print(n)
[('w', 'h', 'i', 's')]
>>> n = re.findall('(\w){4}', a) # 表示拿分组取字符串中匹配4次
>>> print(n)
['s']
>>> 4. findall中的正则(如 *)会匹配到空,那么结果就会输出空,在开发时要避免正则表达式内容为空:
>>> n = re.findall('(\dasd)*','1asd2asdp3asd98kif')
>>> print(n)
['2asd', '', '3asd', '', '', '', '', '', ''] #*默认贪婪匹配,只有一个分组(括号),所以只返回2asd, *为空时,匹配结果为空,字符串最后默认有一个空字符,所以5个字符,匹配出6个空
>>>
>>> n = re.findall('(\dasd)+','1asd2asdp3asd4asd') #改为+,可以匹配想要的内容,不是输出空的结果
>>> print(n)
['2asd', '4asd'] # 因为只有一个括号分组,所以只返回4asd,没有3asd
findall 要注意的问题
>>> import re
>>> p = re.compile(r'\d+')
>>> w = p.finditer('12 qwesdad44ers running, 22 ... 11 ...')
>>> for match in w:
... match.group(),match.span()
...
('', (0, 2))
('', (10, 12))
('', (25, 27))
('', (32, 34))
finditer方法
小结:
3.match,group方法:
match 无分组:
>>> string = 'hello sky asd sky age sky qwe 19'
>>> r = re.match('h\w+',string)
>>> print(r.group()) # 获取匹配到的所有结果
hello
>>> print(r.groups()) # 只获取匹配到的分组结果
()
>>> print(r.groupdict()) # 获取匹配到的分组中所有执行了key的组
{}
>>> match 有分组(分组作用:提取匹配成功的指定内容。先匹配成功全部正则,再把匹配成功的局部内容提取出来):
>>> string = 'hello sky asd sky age sky qwe 19'
>>> r = re.match('h(\w+)',string)
>>> print(r.group())
hello
>>> print(r.groups())
('ello',)
>>> print(r.groupdict())
{}
>>>
指定分组名,放入字典
>>> string = 'hello sky asd sky age sky qwe 19'
>>> r = re.match("(?P<n1>h)(?P<n2>\w+)",string)
>>> print(r.group())
hello
>>> print(r.groups())
('h', 'ello')
>>> print(r.groupdict())
{'n1': 'h', 'n2': 'ello'}
>>> 小结:
对于group方法,无论是否有分组,将会匹配正则表达式中匹配到的所有结果
对于groups方法,在有分组时,将匹配分组括号中(可以有多个分组)的内容,无分组则结果为空
对于groupdict方法,在有分组时,将匹配分组中所有执行了key的组。无分组则结果为空
写法:(?P<组名>正则表达式),输出(以字典的形式输出):{'组名':'正则匹配的结果'},常用语jangle中的路由系统
无分组匹配时,上述三个方法,只有group有意义
4.split分隔方法
# split
# 无分组
string = 'hello sky ald qwe lge zxc 27'
n = re.split('s\w+', string)
print(n)
# 输出 ['hello ', ' ald qwe lge zxc 27'] # 有分组,split方法输出的结果如果用了分组,只保留分组中的内容
n = re.split('(s\w+)', string)
print(n)
# 输出 ['hello ', 'sky', ' ald qwe lge zxc 27']
n = re.split('s(\w+)', string)
print(n)
# 输出 ['hello ', 'ky', ' ald qwe lge zxc 27'] inpp = '1-2*((60-30 +(-40-5)*(9-2*5/3 + 7/3*99/4*2998 +10 * 568/14)) - (-4*3)/(16-3*2))'
n = re.split('\(([^()]+)\)', inpp) # 分割不含括号的最里层表达式,并去掉括号(表达式中转义符去匹配括号,里边括号作用split结果只取分组中的内容)
print(n)
# 输出 ['1-2*((60-30 +', '-40-5', '*', '9-2*5/3 + 7/3*99/4*2998 +10 * 568/14', ') - ', '-4*3', '/', '16-3*2', ')']
split 分组,无分组
4.sub替换方法
# sub不涉及分组
string = '1qqas2uuii234ashjd888kkasd333'
n = re.sub('\d+', '----', string)
print(n)
new_str, count = re.subn('\d+', 'KKK', string)
print(new_str, count) #输出:
----qqas----uuii----ashjd----kkasd----
('KKKqqasKKKuuiiKKKashjdKKKkkasdKKK', 5)
sub,subn方法
5.start() 返回匹配开始的位置
end() 返回匹配结束的位置
6.span() 返回一个元组包含匹配(开始,结束)的位置 几个匹配模式:
1.re.I(re.IGNORECASE): 忽略大小写(括号内是完整写法,下同)
2.re.M(MULTILINE): 多行模式,改变'^'和'$'的行为(参见上图) [用得很少]
3.re.S(DOTALL): 使.匹配包括换行在内的所有字符,点任意匹配模式,改变'.'的行为
>>> re.search(r'a(\d+)','a3333333345b').group()
'a3333333345'
>>> re.search(r'a(\d+?)','a3333333345b').group()
'a3'
>>> re.search(r'a(\d*)','a3333333345b').group()
'a3333333345'
>>> re.search(r'a(\d*?)','a3333333345b').group()
'a' 如果分组括号两侧都有限制条件即:a()b,则分组中的?非贪婪匹配不再起作用
>>> re.findall(r'a(\d+)b','a23b')
['']
>>> re.findall(r'a(\d+?)b','a23b')
['']
>>>
原生字符串:(字符串前面加r,即声明使用原生字符串):
>>> import re
>>> re.search(r"\\","ba\cabc").group()
'\\'
>>> re.search("\\","ba\cabc").group()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
>>> re.search(r"\\","ba\cabc").group()
'\\'
>>> re.findall("\\","ba\cabc")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
>>> re.findall(r"\\","ba\cabc")
['\\']
注:
在python中,\n是换行,\r是回车,\b是退格
python中关于正则内的\b,为什么使用\b时需要用r'\b',但是\w则不需要?
解答:
因为\b 有两种解释,而\w 只有一种。 \b的两种解释是: 1.'\b', 如果前面不加r, 那么解释器认为是转义字符“退格键backspace”;
2.r'\b', 如果前面加r, 那么解释器不会进行转义,\b 解释为正则表达式模式中的字符串边界。 而相比于\b, \w 只有第二种解释,并没有对应的转义字符,所以不加r, 也不会出错。
问答
>>> import re
>>> re.findall('abc\b','asdas abc ') # 由于\b在python中表示退格,所以匹配不到内容
[]
>>> re.findall('abc\\b','asdas abc ') # 转义
['abc']
>>> re.findall(r'abc\b','asdas abc ') # 声明原生字符串,\b此时表示单词边界
['abc']
>>>
例子
split方法:
res = re.split('[0-9]+', 'abc12de3f45GH')
print(res)
输出:['abc', 'de', 'f', 'GH'] sub方法:
res = re.sub('[0-9]+', '|', 'abc12de3f45GH', count=2)
print(res)
输出:abc|de|f45GH 1.re.I(re.IGNORECASE): 忽略大小写
res = re.search('[a-z]+', 'abcGH', flags=re.I)
print(res.group())
输出:abcGH 2.M(MULTILINE): 多行模式,改变'^'和'$'的行为
res = re.search(r"^a", "\nabc\neee", flags=re.M)
print(res.group())
输出:a 3.S(DOTALL): 点任意匹配模式,改变'.'的行为
res = re.search(".+", "\nabc\neee", flags=re.S)
print(res.group())
输出:a 举例:
'.' 默认匹配除\n之外的任意一个字符,若指定flag DOTALL,则匹配任意字符,包括换行 res = re.match('.+', 'Chen123ronghua123')
print(res.group())
输出:
Chen123ronghua123 '$' 匹配字符结尾,或e.search("foo$","bfoo\nsdfsf",flags=re.MULTILINE).group()也可以 res = re.match('r.+', 'Chen123ronghua123') #匹配结果为空,match从字符串开头开始匹配
res = re.search('r.+', 'Chen123ronghua123') #search 从整个文本中搜索
print(res.group())
结果:ronghua '+' 匹配前一个字符1次或多次,re.findall("ab+","ab+cd+abb+bba") 结果['ab', 'abb']
res = re.search('r[a-z]+a', 'Chen123ronghua123') #匹配ronghua
print(res.group())
结果:ronghua res = re.search('#.+#', '1123#hello#')
print(res.group())
结果:#hello# '?' 匹配前一个字符1次或0次
res0 = re.search('aal?', 'aalex')
res1 = re.search('aal?', 'aaex')
print(res0.group())
print(res1.group())
输出
aal
aa '{m}' 匹配前一个字符m次
res = re.search('[0-9]{3}', 'aa1xe2pp345lex') #匹配前面的数字三次
print(res.group()) '{n,m}' 匹配前一个字符n到m次
res = re.search('[0-9]{1,3}', 'aa1xe2pp345lex') #匹配前面的数字1到3次
print(res.group())
输出 1 findall 贪婪匹配
res = re.findall('[0-9]{1,3}', 'aa1xe2pp345lex') #findall,贪婪匹配,匹配前面的数字1到3次
print(res)
输出['1', '2', '345'] #以列表的形式返回 '|' 匹配|左或|右的字符,re.search("abc|ABC","ABCBabcCD").group() 结果'ABC' res = re.search('abc|ABC', 'ABCBabcCD')
print(res.group())
输出 ABC res = re.findall('abc|ABC', 'ABCBabcCD')
print(res)
输出 ['ABC', 'abc'] '(...)' 分组匹配,re.search("(abc){2}a(123|456)c", "abcabca456c").group() 结果 abcabca456c res = re.search('(abc){2}', 'alexabcabc')
print(res.group())
输出 abcabc res = re.search('(abc){2}(\|\|=){2}', 'alexabcabc||=||=') 匹配||= 两次,注意需要转义
print(res.group())
输出:abcabc||=||= '\D' 匹配非数字
res = re.search('\D+', '123$- a')
print(res.group())
输出:$- a '\w' 匹配[A-Za-z0-9] 除了特殊字符都匹配 res = re.search('\w+', '123$- a')
print(res.group())
输出:123 '\W' 匹配非[A-Za-z0-9] 只匹配特殊字符
res = re.search('\W+', '123$- ...a')
print(res.group())
输出:$- ... '\s' 匹配空白字符、\t、\n、\r , re.search("\s+","ab\tc1\n3").group() 结果 '\t'
res = re.findall('\s', '123$- \r\n\t...a')
print(res)
输出:[' ', '\r', '\n', '\t'] >>> re.search('\s+', '123$- \r\n')
<_sre.SRE_Match object; span=(5, 9), match=' \t\r\n'> '\A' 效果和^是一样的,只从字符开头匹配,re.search("\Aabc","alexabc") 是匹配不到的
'\Z' 匹配字符结尾,同$
'\d' 匹配数字0-9 例:
res = re.search('\A[0-9]+[a-z]\Z', '123a')
print(res.group())
输出:123a * : 0个至多个
+ :1个至多个 res = re.match('^Chen\d+', 'Chen123ronghua123')
print(res)
print(res.group()) #查看匹配到的对象 输出:<_sre.SRE_Match object; span=(0, 7), match='Chen123'>
Chen123 '(?P<name>...)' 分组匹配
res = re.search("(?P<province>[0-9]{4})(?P<city>[0-9]{2})(?P<birthday>[0-9]{4})","371481199306143242").groupdict("city")
print(res)
结果{'province': '3714', 'city': '81', 'birthday': '1993'}
python正则-- re模块的更多相关文章
- python 正则 re模块(详细版)
正则表达式 什么是正则表达式? 正则表达式是对字符串(包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为“元字符”))操作的一种逻辑公式,就是用事先定义好的一些特定字符.及这些特定字符的组合 ...
- python正则--re模块常用方法
前面几篇关于正则匹配的文章我用的方法都只有一个re.search 但其实正则re模块提供很多非常好用的方法,我们先来看看re模块都有那些属性方法呢 前面的一堆带_或者大写的就不关注了,主要关注最后面的 ...
- Python 正则表达模块详解
Python 的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语言的一种继承.Py ...
- python正则re模块
今日内容: 知识点一:正则 什么是正则: 就是用一系列具有特殊含义的字符组成一套规则,改规则用来描述具有某一特征的字符串 正则就是用来在一个大的字符串中取出符合规则的小字符串 为什么用正则: ...
- python 正则re模块
re.match re.match 尝试从字符串的开始匹配一个模式,如:下面的例子匹配第一个单词. import re text = "JGood is a handsome boy, he ...
- python 正则,常用正则表达式大全
Nginx访问日志匹配 re.compile #re.compile 规则解释,改规则必须从前面开始匹配一个一个写到后面,前面一个修改后面全部错误.特殊标准结束为符号为空或者双引号: 改符号开始 从 ...
- Python开发【模块】:re正则
re模块 序言: re模块用于对python的正则表达式的操作 '.' 默认匹配除\n之外的任意一个字符,若指定flag DOTALL,则匹配任意字符,包括换行 '^' 匹配字符开头,若指定flags ...
- 认识python正则模块re
python正则模块re python中re中内置匹配.搜索.替换方法见博客---python附录-re.py模块源码(含re官方文档链接) 正则的应用是处理一些字符串,phthon的博文python ...
- Python模块(三)(正则,re,模块与包)
1. 正则表达式 匹配字符串 元字符 . 除了换行 \w 数字, 字母, 下划线 \d 数字 \s 空白符 \n 换行符 \t 制表符 \b 单词的边界 \W \D \S 非xxx [ ...
随机推荐
- JQuery加载并解析XML
转自http://blog.csdn.net/pan_junbiao/article/details/7441003,致谢! 1.简述 XML(eXtensible Markup Language)即 ...
- source sh运行脚本的差别
主要有两种方式运行shell脚本 1)source test.bsh 2)sh test.bsh 1)souce运行脚本文件会在父程序中运行.各项动作都会在原本的bash内生效.运行过程不另开进程.脚 ...
- Nginx日志配置与切割
访问日志主要记录客户端访问Nginx的每一个请求,格式可以自定义.通过访问日志,你可以得到用户地域来源.跳转来源.使用终端.某个URL访问量等相关信息. Nginx中访问日志相关指令主要有两条,一条是 ...
- oracle中提高order by的性能
1.如果order by columnA,那么在where查询条件中添加条件columnA=value,则oracle内部会过滤order by排序,直接用索引(可以通过execution plan查 ...
- UFLDL深度学习笔记 (五)自编码线性解码器
UFLDL深度学习笔记 (五)自编码线性解码器 1. 基本问题 在第一篇 UFLDL深度学习笔记 (一)基本知识与稀疏自编码中讨论了激活函数为\(sigmoid\)函数的系数自编码网络,本文要讨论&q ...
- 记pytorch版faster rcnn配置运行中的一些坑
记pytorch版faster rcnn配置运行中的一些坑 项目地址 https://github.com/jwyang/faster-rcnn.pytorch 一般安装配置参考README.md文件 ...
- 转载:SQL 字符串操作函数
http://www.cnblogs.com/jiajiayuan/archive/2011/06/16/2082488.html 以下所有例子均Studnet表为例: 计算字符串长度len()用来 ...
- bzoj3992【SDOI2015】序列统计
3992: [SDOI2015]序列统计 Time Limit: 30 Sec Memory Limit: 128 MB Submit: 673 Solved: 327 [Submit][Stat ...
- 已备份数据库的磁盘结构版本号为611,server支持版本号为539,无法还原或升级数据库
提供的是bak文件是2005备份的,还原到本地的sqlserver2000,提示:已备份数据库的磁盘上结构版本号为611.服务器支持版本号539,无法还原或升级数据库. 网上找了下,原因是611是sq ...
- 【BZOJ3488】[ONTAK2010]Highways 扫描线+树状数组
[BZOJ3488][ONTAK2010]Highways Description 给一棵n个点的树以及m条额外的双向边q次询问,统计满足以下条件的u到v的路径:恰经过一条额外的边不经过树上u到v的路 ...