1. python re 正則匹配某類字元前的所有字元(不包括該類字元)
首先,「匹配除2012這個字元串以外的任意字元?」語義不明,你是想將其從原字元串中刪除還是要匹配2012以外的年份?
姑且認為你的意思是後者,也即在一個特定模式里排除某些匹配的實例。
方法一、先預處理,將要匹配的字元串里的2012替換成不可能出現的字元串,然後再進行匹配處理,最後再將其替換回2012。
方法二、使用不匹配的前向斷言 (?! ...):
import re
s = '....<b>0033<b> <b>1033<b> <b>2012<b> <b>2033<b> <b>2043<b> <b>3033<b>.....'
p = re.compile('<b>(?!2012)[0-9]{4}<b>')
for m in re.finditer(p, s):
print m.group()
可以匹配出
<b>0033<b>
<b>1033<b>
<b>2033<b>
<b>2043<b>
<b>3033<b>
而沒有'<b>2012<b>'
2. python re模塊如何判斷字元串中包含某些特定字元如文件名中不能包含'','/'等字元,如何檢查
方法有很多,例如使用首尾位置標記^$+非法字元集[^]實現:
regex=r'^[^\/:*?"<>|]+$'#不能為空,不能含有/:*?"<>|等字元
tests=['abc_def',
'abc.def',
'abc/def',
'?"',
'']
matches=[iforiintestsifre.match(regex,i)]
print(matches)
還可以通過負向零寬斷言(?!)等方式實現。
3. day-04 總結python字元串
1.什麼是字元串
序列,有序,不可變的
用單引號或者雙引號任意字元集,
2,字元串中的字元
普通字元:ན', 'sdfsdfsd', '+ + (**&^%$#@@', '發技術規范舉案說法'
'''
python中的字元採用的是unicode編碼
1.什麼是編碼
就是數字和字元的一一對應的,其中字元對應的數字就是字元的編碼
a - 97
b - 98
2.編碼方式
ASCII碼表 :針對數字字元,字母字元(26個小寫字母和26個大寫字母),一些英文中對應的符號進行編碼
小寫字母要大於大寫字母的編碼值,採用一個位元組對字元進行編碼,只能對128個字元進行編碼
Unicode碼 :Unicode碼包含了ASCII碼表,同時能夠對世界上所有語言對應的符號進行編碼,
採用兩個位元組進行編碼,能夠編碼65536個字元
3.兩個函數
chr(編碼值)--將字元編碼值轉化為字元
ord(字元)-- 獲取字元對應的編碼值
中文編碼范圍 0x4e00~~~~~0x9fa5
一旦一個字元串確定了,那麼字元串中每個字元的位置就確定了,而且每個字元會對應一個表示其位置和順序的下標值
1,下標(索引)
字元串中的每一個字元都有一個下標,代表在字元串中的位置
下標范圍是:0到字元串長度---1 0(代表第一個字元的位置)
-1 ~ 字元串長度 -1(代表字元串中最後一個字元的位置)
'abc' # ''
獲取單個字元
語法:字元串[下標]--獲取字元串中指定下標對應的字元
說明 字元串--可以是字元串常量,也可以是字元串變數
[]---固定寫法
下標--字元的下標,不能越界。
獲取部分字元
語法:字元串[開始下標:結束下標:步長]
步長-- 一個整數
功能: 從開始下標獲取到結束下標前位置,每次下標值增加步長,結果是字元串
注意:當步長是整數,開始下標對應的字元要在結束下標的前面
當步長是負數,開始下標對應的字元要在結束下標的後面
方法2:字元串[開始下表:結束下標](相當於步長是一)
獲取部分字元,省略下標
獲取部分字元的時候開始下標和結束下標都可以省略
a.開始下標省略
字元串[:結束下標:步長] 或者字元串[:結束下表]
字元串是正數:從字元串開頭開始往後獲取
字元串是負數:從字元串結尾開始往前獲取
結束下標省略
字元串[開始下標::步長]
步長是正數,從開始下標從前往後獲取到字元串最後
步長是負數,從開始下標從後往前獲取到字元串開始
,加法運算
字元串1 + 字元串2 將兩個字元串拼接在一起,產生一個新的字元串
乘法運算
字元串 * n(正整數):字元串中的內容重復n次產生一個新的字元串
比較運算符
a. == !=
字元串1 == 字元串2 ---------判斷兩個字元串是否相等
b.> ,< , >= ,<= (所有的大寫字母編碼都比小寫的編碼小)
兩個字元串比較大下:從第一個開始,找到第一對不同的字元,然後比較他們的編碼值的大小
in 和 not in
字元串1 in 字元串2 :判斷字元串2是否包含字元串1
字元串1 not in 字元串2 :判斷字元串2是否不包含字元串1
len函數
len(序列)------- 獲取序列的長度
len(字元串)----獲取字元串中字元的個數
str函數
str(數據): 將數據轉換成字元串
其他數據轉換成字元串
所有的數據都可以轉換成字元串,轉換的時候就是在數據的值的最外面加引號
補充:系統對應的類型名不能用來給變數命名
字元串轉其他類型
字元串轉整數: int(字元串) 去掉引號後本身就是個整數的字元串才能轉
字元串轉浮點型: Float(字元串)
字元串轉布爾: boll(字元串) ,除了空串會轉化成False,其他的都會轉化成True
格式字元串
指的是字元串中通過格式佔位符來表示字元串中變化,然後後面再通過其他的值來給佔位符賦值
含有格式佔位符的字元串 % (佔位符對應的值)
說明:
含有格式佔位符有固定寫法,可以有多個
%----固定寫法
()----裡面值 的個數要和前面的格式佔位符一一對應
%d--整數
%s--字元串
%f--小數
%c--字元(可以將數字轉換成字元)
字元串.capitalize() - 將字元串第一個字元轉換成大寫
2.字元串對齊
字元串.center(width, fillchar) - 居中
字元串.ljust(width, fillchar) - 左對齊
字元串.rjust(width, fillchar) - 右對齊
width - 正整數,表示新的字元串的寬度
fillchar - 字元, 填充字元串
字元串.isalpha 若字元串至少有一個字元,並且所有字元都是字母就返回True,否則返回False
字元串。isdigit() 若字元串中只包含數字就返回True,否則返回False
若字元串中只包含數字字元,則返回True,否則返回 False
3.join(seq)
字元串1.join(字元串2): 將字元串1的內容插入到字元串2的每個字元之間
max(字元串) 編碼最大
min(字元串)
count(str)|返回 str 在 string 裡面出現的次數
|islower()|如果字元串中包含至少一個區分大小寫的字元,並且所有這些(區分大小寫的)字元都是小寫,則返回 True,否則返回 False
expandtabs(tabsize=8)|把字元串 string 中的 tab 符號轉為空格,tab 符號默認的空格數是 8 。
|isspace()|如果字元串中只包含空白,則返回 True,否則返回 False
endswith(suffix)|檢查字元串是否以 obj 結束,如果beg 或者 end 指定則檢查指定的范圍內是否以 obj 結束,如果是,返回 True,否則返回 False.
4. 【python】判斷兩個字元串的包含關系
題目:給定由字母組成的字元串s1和s2,其中,s2中字母的個數少於s1,陪蘆如何判斷s1是否包含s2?
分析:哈希法。
code:
str1 = 'aaaabbce'
str2 = 'abcbbaaad'
list1 = list(str1)
list2 = list(str2)
i = 0
hashTable1 = dict()
while i < len(str1):
if list1[i] not in hashTable1:
hashTable1[list1[i]] = 0
i += 1
i = 0
hashTable2 = dict()
while i < len(str2):
if list2[i] not in hashTable2:
hashTable2[list2[i]] = 0
i += 1
count = 0
for k, v in hashTable1.items():
if k in hashTable2:
鋒輪 count += 1
else:
print("不包含"銀亂信)
break
程序運行結果:
不包含
5. 【python】判斷一個字元串是否包含重復字元
題目:判斷一個字元串是否包含重復字元。例如good則包含,abc則不包含。
分析:哈希法。
code:
(1)
strs = 'Good'
hashTable = dict()
listStrs = list(strs)
i = 0
while i < len(strs):
if listStrs[i] in hashTable:
print("有重復字元")
break
else:
hashTable[listStrs[i]] = None
i += 1
if i >= len(strs):
print("沒用重復字元")
break
程序運行結果:
有重復字元
(2)
def longest_repetition(chars):
if len(chars) is None or len(chars) <= 1:
return (chars, len(chars))
result = [1] * len(chars)
for left in range(len(chars) - 1):
for right in range(left + 1, len(chars)):
if chars[left] == chars[right]:
print("a")
result[left] += 1
else:
print("aa")
break
#return result
return (chars[result.index(max(result))], max(result))
if __name__ == "__main__":
txt = 'banaaana'
print(longest_repetition(txt))
6. python如何檢測字典的鍵中是否含有某串字元
1、說明
python中檢測字典的鍵中是否含有某串字元,便利字典鍵值,再判斷字元串是否在鍵值中即可。
2、示例代碼:
# 定義一個字典
dic = {'1984/1/2': 123, '1984/1/3': 0, '1985/1/1': 156}
# 遍歷字典鍵中是否包含1984
for key in dic:
if '1984' in key:
print('鍵值中包含字元串"1984"')
# 或者需要的其它操作
else:
print('鍵值中不包含字元串"1984"')
3、執行結果:
鍵值中包含字元串"1984"
鍵值中不包含字元串"1984"
鍵值中包含字元串"1984"
4、其它說明:
python使用for in直接操作字典就是遍歷字典的鍵值,python使用in操作來判斷字元串中是否包含子串最方便,要優於使用字元串的函數index或者find。
index函數在找不到子串時會報錯,find函數會返回-1。
7. python 怎樣用正則表達式匹配不包含某些字元的字元串
rex = r'[^abcde]*'re.match(rex, 'this is a string')返回值是None則不匹配,反之匹配 當然先compile一下也很好。唯褲孝
拓展:
1、Python(英語發音:/ˈ純譽paɪθən/), 是一種面向對象、解釋型計算機程序設計語指稿言,由Guido van Rossum於1989年底發明,第一個公開發行版發行於1991年,Python 源代碼同樣遵循 GPL(GNU General Public License)協議。Python語法簡潔而清晰,具有豐富和強大的類庫。
2、它常被昵稱為膠水語言,能夠把用其他語言製作的各種模塊(尤其是C/C++)很輕松地聯結在一起。常見的一種應用情形是,使用Python快速生成程序的原型(有時甚至是程序的最終界面),然後對其中有特別要求的部分,用更合適的語言改寫,比如3D游戲中的圖形渲染模塊,性能要求特別高,就可以用C/C++重寫。
8. 怎麼樣使用python3查找文件中是否包含某個字元串,沒有則在文件末尾追加進去
a = 'RQUOTAD_PORT=30001'
with open('nfs','r') as f:
if a not in f.read():
print(a)
f=open('/nfs','a')
f.write("RQUOTAD_PORT=30001
")
f.close()
9. python 正則替換不包含某字元串的其他字元
這個是數顫茄字個嘩洞察數亂茄不定,
10. Python處理字元串必備方法
字元串是Python中基本的數據類型,幾乎在每個Python程序中都會使用到它。
▍1、Slicing
slicing切片,按照一定條件從列表或者元組中取出部分元素(比如特定范圍、索引、分割值)
▍2、****strip()
strip()方法用於移除字元串頭尾指定的字元(默認為空格或換行符)或字元序列。
在使用strip()方法時,默認去除空格或換行符,所以#號並沒有去除。
可以給strip()方法添加指定字元,如下所示。
此外當指定內容不在頭尾處時,並不會被去除。
第一個 前有個空格,所以只會去取尾部的換行符。
最後strip()方法的參數是剝離其值的所有組合,這個可以看下面這個案例。
最外層的首字元和尾字元參數值將從字元串中剝離。字元從前端移除,直到到達一個不包含在字元集中的字元串字元為止。
在尾部也會發生類似的動作。
▍3、****lstrip()
移除字元串左側指定的字元(默認為空格或換行符)或字元序列。
同樣的,可以移除左側所有包含在字元集中的字元串。
▍4、rstrip()
移除字元串右側指定的字元(默認為空格或換行符)或字元序列。
▍5、****removeprefix()
Python3.9中移除前綴的函數。
和strip()相比,並不會把字元集中的字元串進行逐個匹配。
▍6、removesuffix()
Python3.9中移除後綴的函數。
▍7、****replace()
把字元串中的內容替換成指定的內容。
▍8、****re.sub()
re是正則的表達式,sub是substitute表示替換。
re.sub則是相對復雜點的替換。
和replace()做對比,使用re.sub()進行替換操作,確實更高級點。
▍9、****split()
對字元串做分隔處理,最終的結果是一個列表。
當不指定分隔符時,默認按空格分隔。
此外,還可以指定字元串的分隔次數。
▍10、****rsplit()
從右側開始對字元串進行分隔。
▍11、****join()
string.join(seq)。以string作為分隔符,將seq中所有的元素(的字元串表示)合並為一個新的字元串。
▍12、****upper()
將字元串中的字母,全部轉換為大寫。
▍13、****lower()
將字元串中的字母,全部轉換為小寫。
▍14、capitalize()
將字元串中的首個字母轉換為大寫。
▍15、****islower()
判斷字元串中的所有字母是否都為小寫,是則返回True,否則返回False。
▍16、isupper()
判斷字元串中的所有字母是否都為大寫,是則返回True,否則返回False。
▍17、****isalpha()
如果字元串至少有一個字元並且所有字元都是字母,則返回 True,否則返回 False。
▍18、isnumeric()
如果字元串中只包含數字字元,則返回 True,否則返回 False。
▍19、isalnum()
如果字元串中至少有一個字元並且所有字元都是字母或數字,則返回True,否則返回 False。
▍20、count()
返回指定內容在字元串中出現的次數。
▍21、****find()
檢測指定內容是否包含在字元串中,如果是返回開始的索引值,否則返回-1。
此外,還可以指定開始的范圍。
▍22、rfind()
類似於find()函數,返回字元串最後一次出現的位置,如果沒有匹配項則返回 -1。
▍23、startswith()
檢查字元串是否是以指定內容開頭,是則返回 True,否則返回 False。
**
**
▍24、****endswith()
檢查字元串是否是以指定內容結束,是則返回 True,否則返回 False。
▍25、****partition()
string.partition(str),有點像find()和split()的結合體。
從str出現的第一個位置起,把字元串string分成一個3 元素的元組(string_pre_str,str,string_post_str),如果string中不包含str則 string_pre_str==string。
▍26、center()
返回一個原字元串居中,並使用空格填充至長度width的新字元串。
▍27、ljust()
返回一個原字元串左對齊,並使用空格填充至長度width的新字元串。
▍28、rjust()
返回一個原字元串右對齊,並使用空格填充至長度width的新字元串。
▍29、f-Strings
f-string是格式化字元串的新語法。
與其他格式化方式相比,它們不僅更易讀,更簡潔,不易出錯,而且速度更快!
▍30、swapcase()
翻轉字元串中的字母大小寫。
▍31、zfill()
string.zfill(width)。
返回長度為width的字元串,原字元串string右對齊,前面填充0。
參考文獻: https://mp.weixin.qq.com/s/9cuO-KL3g9ldqRGGZBVnjw