㈠ 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) 表示特殊字符不做处理