㈠ python3判斷是字元串中包含某些特定字元
在python中,前綴r或r表示「自然字元串」,特殊字元失去意義,所見即所得,這個設計類似perl的「單引號字元串」。
一般字元串newlines
are
indicated
by
\\n
等價於「自然字元串」
rnewlines
are
indicated
by
\n
和一般字元串相比,自然字元串里的\不再具有特殊含義,於是可以省去了一個\
在描述正則表達式時,推薦使用自然字元串,否則整行都是轉義字元\
㈡ python如何安裝re庫
re庫是Python關於正則表達式的一個內置模塊,使用時無需下載,直接import即可。我們首先來看看re.py自己頭部的注釋是如何描述自己的:
這個模塊提供與Perl語言中類似的正則表達式匹配操作,支持bytes和unicode兩種格式的字元串,處理的字元串可以包含空字元以及超出ASCII碼范圍的字元(比如中文字元)。
正則表達式中既有'A'、'a'這種就代表自身的一般字元,又有一些具有特定含義的特殊字元,如|、(等。特殊字元既可以作為一個單純的值表示它自身,也可以影響它周邊1的正則表達式的解釋。
re庫中還包含一些特殊的字元序列,由\和一個字元組成的特殊序列在下表列出,如果\之後的字元不在下列表格中,正則表達式將會匹配字元本身,如\c匹配的就是字元c本身。我們發現如果 \小寫字母 代表了某一含義,那麼對應的 \大寫字母 常常代表它的補集。
㈢ python pandas 過濾某列特殊字元求助
漢字也被替換掉了:utf-8
import numpy as np
import pandas as pd
import re
df=pd。
#coding;cidnum'.keyword = df,';)
發現結果把所有的非數字及字母全部替換掉了;;keyword')
df;/, '.str,';'[^a-zA-Z0-9_\]
#將雙引號過濾掉
#將NA的替換掉g
df=df.keyword = df;;path'
df,'name'home/.keyword, '.replace(r;0'file_20150625'.fillna(')
r=u',header=None;cid'.str.lower()
i = 0
df, sep='.keyword,字母意外的所有特殊符號,數字;;u9fa5]'u4e00-\t'想過濾掉除文字。原因是什麼啊.read_csv('.columns=[',具體解決方案如下:
解決方案1:
改成r="\W"試試
解決方案2:
=u'u4e00-\[^a-zA-Z0-9_\u9fa5]'
解決方案3:
你自己先要確定「亂碼」的定義,例如韓文(unicode),如果你裝了韓文字體,那是可以顯示的,不是亂碼,但沒裝的話就是問號一堆,如果是韓文
(euc-kr),在漢字系統那隻是一堆無語義的漢字……可能這個舉例扯遠了,你覺得不會有這種情況,但我只是提醒一下會有意料之外的情況
所以,你需要一個白名單,把你允許的字元unicode范圍都列出來,因為肯定不止漢字,像你列出的文件名中就有空格
另外,沒必要逐個字元檢查,直接用re.sub去除白名單外的字元就可以了
㈣ python正則表達式re.findall(r"\b\w+\b", s)中的r是什麼意思
Python中字元串前面加上
r
表示原生字元串,
與大多數編程語言相同,正則表達式里使用"\"作為轉義字元,這就可能造成反斜杠困擾。假如你需要匹配文本中的字元"\",那麼使用編程語言表示的正則表達式里將需要4個反斜杠"\\\\":前兩個和後兩個分別用於在編程語言里轉義成反斜杠,轉換成兩個反斜杠後再在正則表達式里轉義成一個反斜杠。Python里的原生字元串很好地解決了這個問題,這個例子中的正則表達式可以使用r"\\"表示。同樣,匹配一個數字的"\\d"可以寫成r"\d"。有了原生字元串,你再也不用擔心是不是漏寫了反斜杠,寫出來的表達式也更直觀。
㈤ python re模塊如何判斷字元串中包含某些特定字元如文件名中不能包含'','/'等字元,如何檢查
方法有很多,例如使用首尾位置標記^$+非法字元集[^]實現:
regex=r'^[^\/:*?"<>|]+$'#不能為空,不能含有/:*?"<>|等字元
tests=['abc_def',
'abc.def',
'abc/def',
'?"',
'']
matches=[iforiintestsifre.match(regex,i)]
print(matches)
還可以通過負向零寬斷言(?!)等方式實現。
㈥ python中re庫的常見用法
. 匹配除換行符外的任意字元
\d 匹配數字
\D 匹配非數字
\w 匹配數字字母下劃線,支持中文
\W 小寫w的反集
[abc] 匹配abc中任意一個
[a-f] 匹配字母a到f中的任意一個
x|y 匹配x或者y
^ 匹配字元串的開頭
$ 匹配字元串的結尾
{3,5} 匹配次數,最少3個,最多5個
{3,} 至少匹配3次
* 匹配前一個字元,0次或多次
+ 匹配前一個字元,1次或多次
? 當前面不是數量表達式時,代表匹配0次或1次
舉個栗子:
findall()函數的作用是匹配所有符合條件字元串,並以列表形式返回
由於.是匹配除換行符外的所有字元,{3,5} 匹配次數,最少3個,最多5個,在默認的貪婪模式下會匹配最多的字元,所以在列表中,字母a開頭的字元串後面都跟了5個字元。
可以看到在非貪婪模式下,列表中的每一項都匹配最少的字元數。
從前往後,匹配到符合條件的最短的每一個字元串
邊界字元:
^ 限定開頭
$ 限定結尾
匹配分組:
() 提取出來的只有括弧里匹配到的部分
上文中已經用到這個方法了,返回匹配到的字元串列表,如果沒有匹配到的內容,則返回空列表。
flags參數是可以省略的,不省略時代表具有其他特殊的功能,如忽略大小寫,忽略換行符等,re.S代表匹配時忽略換行符
re.search()和re.findall()的參數是一樣的,只是返回結果不同,如果匹配到了,就返回該結果的正則表達式對象;如果沒有匹配到,則返回None
使用re.search()返回匹配到的第一個字元串的正則表達式對象,找到了就會停止匹配。因此這個函數比較適合在一個大文本中找第一個出現的字元串。
若想讓這個字元串展示出來,還需要藉助group()函數。
舉個栗子:
這個函數的作用是將正則表達式編譯為一個正則表達式對象,如果要多次使用這個正則表達式的話,可以先編譯,然後復用,使程序更高效一些,對這個對象繼續使用.match(string)就可以顯示匹配到的正則表達式對象,後續如果想要獲取具體內容的話,和上面是一眼國的,直接使用group(0)就可以啦。
如果不考慮復用的話,和re.mach(pattern, string)的效果是一樣的。
從運行結果也可以看出,re.match()和re.search()的區別,雖然二者都會返回匹配到的正則表達式對象,但是re.match()是從字元串的最開始位置開始匹配的,如果最開始的字元不匹配則會直接返回None;而re.search()則會一直往後找,直到找到第一個符合條件的字元串。
re.sub()函數用於替換字元串中的匹配項
舉個栗子:
將所有數字替換為了一個空格。
㈦ python 如何去特殊字元
針對這里的問題,我們可以先將文件名解碼成unicode,然後用gbk編碼,如果拋出異常,說明編碼失敗,即文件名中存在特殊字元。下面是一個小例子:
#! /usr/bin/env python
# -*- coding: utf-8 -*-
file_names = ["œ®特殊字元.txt",
"沒有特殊字元.txt",
"ßååå.txt"
]
for file_name in file_names:
try:
file_name.decode("utf-8").encode("gbk")
print file_name, "..."
except UnicodeEncodeError:
print file_name, "中獎"
"""outputs:
œ®特殊字元.txt 中獎
沒有特殊字元.txt ...
ßååå.txt 中獎
"""
㈧ python字元串(特殊字元,取值,常用方法)
1.字元串
特殊字元串
\n:換行
\r:刪除\r前面的字元
\t:製表符
例如:
s_1 = "人生苦短,\n我選Python!"
s_2 = "人生苦短,\r我選Python!"
s_3 = "人生苦短,\t我選Python!"
print(s_1) # 人生苦短,
print(s_2) # 我選Python
print(s_3) # 人生苦短, 我選Python!
遇到特殊字元,想去掉效果,把特殊字元轉成普通字元
可以使用# r R
s_1 =r "人生苦短,\n我選Python!"
s_2 =R "人生苦短,\r我選Python!"
s_3 = "人生苦短,\t我選Python!"
2.字元串取值
特點:取頭不取尾,正序從0開始,倒序從-1開始
[start:end:step] #step:表示間隔
s='hello python lemon'
print(s[6:12:1]) #正序 python 6,7,8,9,10,11
print(s[-12:-6:1]) # 倒序 python -12,-11,-10,-9,-8,-7
print(s[:])#hello python lemon 從頭取到尾 [:]
print(s[6:]) #python lemon 從6取到尾 [start:]
print(s[:17])# [:end] 從開始取到16
獲取s所有的偶數位的字母
print(s[0:17:2])
獲取s所有的奇數位的字母
print(s[1:18:2])
倒序輸出所有的字母
print(s[17::-1]) # 不可以寫出是s[17:-1:-1] or s[17:0:-1]
3.常用方法
find() : 返回-1表示未找到子字元串,找到會返回對應字元的索引,子字元包含單個字元或多個字元
isdigit():判斷是否全部是數字,是返回True,否返回False
replace(要替換的內容:替換的內容:替換的次數):指定替換內容以及被替換的字元串,並可以指定替換次數,默認是全部替換
split(指定字元,指定切割的次數):根據指定字元對字元串進行切割,默認全部切割
strip():去掉頭和尾指定的字元
upper():字元串的字母轉成大寫
lower():字元串的字母轉成小寫
swapcase():字元串的字母大小互換
例如:
s='learn python in lemon'
print(s.find('n')) #返回找到字元串的索引
print(s.find(python))#返回找到的子字元串的第一個索引值--6
print(s.find('k')) # 返回-1
print(s.find('o',11))#從索引值為11的值開始找---19
print(s.isdigit())# 返回False
s1 = "******learn python*****"
print(s.strip("*"))# learn python
㈨ python中特殊字元的替換
1、用字元串本身的replace方法
復制代碼代碼如下:
a.replace('word','python')
輸出的結果是hello python
2、用正則表達式來完成替換:
復制代碼代碼如下:
import re
strinfo = re.compile('word')
b = strinfo.sub('python',a)
print b
輸出的結果也是hello python
至於用哪個方法的話,看你自己的選擇了。
㈩ python字元串中如何讓特殊字元不處理
方法一: 字元前面加 \ eg: '\\' '\\n'
方法二: 整個字元串前面加一個字母 r(代表raw) 表示特殊字元不做處理