想要解析文本并仅返回字母,数字,正斜杠和反斜杠,并用''替换所有其他斜杠。

是否可以仅使用一种正则表达式模式,而不是随后需要循环的几种正则表达式模式? 无法获取下面的样式,不能替换正斜杠。

line1 ="1/R~e`p!l@@a#c$e%% ^A&l*l( S)-p_e+c=ial C{har}act[er]s ;E  xce|pt Forw:ard" $An>d B,?a..ck Sl'as

line2 = line

RGX_PATTERN ="[^\w]","_"

for pattern in RGX_PATTERN:

line = re.sub(r"%s" %pattern, '', line)

print("replace1:" + line)

#Prints: 1ReplaceAllSpecialCharactersExceptForwardAndBackSlashes2

以下来自SO的代码已经过测试,发现比regex更快,但随后它替换了所有要保留的特殊字符,包括/和。 有什么方法可以对其进行编辑以使其适合我的用例,并且仍然保持它在正则表达式方面的优势?

line2 = ''.join(e for e in line2 if e.isalnum())

print("replace2:" + line2)

#Prints: 1ReplaceAllSpecialCharactersExceptForwardAndBackSlashes2

作为一个额外的障碍,要解析的文本应采用ASCII格式,因此,如有可能,其他编码中的字符也应替换为''

更快一点并且适用于Unicode:

full_pattern = re.compile('[^a-zA-Z0-9\\\/]|_')

def re_replace(string):

return re.sub(full_pattern, '', string)

如果您真的想要它,那是迄今为止最好的方法(但有点晦涩):

def wanted(character):

return character.isalnum() or character in '\\/'

ascii_characters = [chr(ordinal) for ordinal in range(128)]

ascii_code_point_filter = [c if wanted(c) else None for c in ascii_characters]

def fast_replace(string):

# Remove all non-ASCII characters. Heavily optimised.

string = string.encode('ascii', errors='ignore').decode('ascii')

# Remove unwanted ASCII characters

return string.translate(ascii_code_point_filter)

时序:

SETUP="

busy = ''.join(chr(i) for i in range(512))

import re

full_pattern = re.compile('[^a-zA-Z0-9\\\/]|_')

def in_whitelist(character):

return character.isalnum() or character in '\\/'

def re_replace(string):

return re.sub(full_pattern, '', string)

def wanted(character):

return character.isalnum() or character in '\\/'

ascii_characters = [chr(ordinal) for ordinal in range(128)]

ascii_code_point_filter = [c if wanted(c) else None for c in ascii_characters]

def fast_replace(string):

string = string.encode('ascii', errors='ignore').decode('ascii')

return string.translate(ascii_code_point_filter)

"

python -m timeit -s"$SETUP""re_replace(busy)"

python -m timeit -s"$SETUP""''.join(e for e in busy if in_whitelist(e))"

python -m timeit -s"$SETUP""fast_replace(busy)"

结果:

10000 loops, best of 3: 63 usec per loop

10000 loops, best of 3: 135 usec per loop

100000 loops, best of 3: 4.98 usec per loop

在所有这些方面产生与我的输出完全相同的输出:

@Master_Yoda; 您可能正在使用Python2。OP正在使用Python 3。

好电话,没有注意到这一点。

经过测试,它确实处理了非ascii文本

你为什么不能做这样的事情:

def in_whitelist(character):

return character.isalnum() or character in ['\','/']

line2 = ''.join(e for e in line2 if in_whitelist(e))

根据建议进行编辑以压缩功能。

为了简洁起见,我个人将最后一部分更改为character in [\, ]。

好。 这工作了。 只是必须转义反斜杠[\\, ]

转义字符串文字后为我工作...哦,@ Khaelid同意。

无法完成所有这些操作:(等)

python的百分号和斜杠 除_关于python:如何替换除字母,数字,正斜杠和反斜杠之外的所有字符...相关推荐

  1. 在python中print表示的数据类型是_【Python连载】那些必须掌握的Python数据类型

    原标题:[Python连载]那些必须掌握的Python数据类型 经过近几年的发展,Python已成为了数据科学和机器学习的首选语言,许多人也因此开始走上自学python之路.从今天开始,本公众号将陆续 ...

  2. python里的rindex是什么意思_用Python操作字符串之rindex()方法的使用

    用Python操作字符串之rindex()方法的使用 rindex()方法返回所在的子str被找到的最后一个索引,可选择限制搜索的字符串string[beg:end] 如果没有这样的索引存在,抛出一个 ...

  3. python整钱兑换零钱while语句_关于python:如何将钱(便士)转换为单个硬币?

    我的任务是 "编写一个功能selectCoins,要求用户输入金额 (以便士为单位),然后输出每种面额的硬币数量(从£ 2向下 到1p)应该用来精确地补足该金额(使用尽可能少的 硬币数量). ...

  4. python程序设计课后答案第三单元_最新Python程序设计课后习题答案-第一单元

    精品文档 精品文档习题1 一.选择题 1.Python语言属于().C A.机器语言 B.汇编语言 C.高级语言 D.科学计算语言2.下列选项中,不属于Python特点的是().B A.面向对象 B. ...

  5. python linux系统管理与自动化运维_《Python Linux系统管理与自动化运维》赖明星著【摘要 书评 在线阅读】-苏宁易购图书...

    商品参数 作者: 赖明星著 出版社:机械工业出版社 出版时间:2017-09-01 版次:1 开本:16开 装帧:平装 ISBN:9787111578659 版权提供:机械工业出版社 基本信息 商品名 ...

  6. python这么多包、怎么记住_学Python的人这么多 有哪些技巧可言

    学Python的人这么多,有哪些技巧可言?用Python完成项目,编写的代码量更少,代码简短可读性强,团队协作开发时读别人的代码速度会非常快,使工作变得更加高效.优雅做开发不再是梦,所以Python是 ...

  7. python向mysql中添加数据标签_用python在MySQL中写入数据和添加数据

    在笔者之前的博文中,已介绍了用python连接与mysql数据库的知识.包括如何安装python连接mysql的pymysql包,如何通过cusor语句将python与mysql连接起来,以及如何用p ...

  8. python适合零基础的人吗_学Python需要什么基础知识?零基础可以学Python吗?

    学Python需要什么基础知识?一般来说,想要学Python最好具备一定的计算机专业知识,尤其是数学和英语不错的话,对学Python也有一定的帮助.但是零基础的学习者就不能学Python了吗?当然不是 ...

  9. python交互式编程入门先学什么_为什么 Python 对于编程入门学习来说,是一门很棒的语言...

    在这篇文章里,我会来阐述下为什么我觉得 Python 对于计算机编程入门教学来说是一门很棒的编程语言(对基础编程课程更多观点可以查看这篇文章).这也是从我针对初学者Python 编程教学过程中获得并总 ...

最新文章

  1. 在创建ArcGIS Server10.5的站点时,系统提示创建‘System/publishingToolsEX.GPServer’失败(转)...
  2. AlphaCode能替代人类程序员吗?网友:被替代也挺好,这样就可以少写代码多开会了...
  3. python 如何判断一组数据是否符合正态分布
  4. Angular中使用双向数据绑定操作表单的input、checkboc、radio、select、textarea实现简单的人员登记系统实例
  5. java selenium (六) XPath 定位
  6. java接口常见问题分析_常见问题 - Apache ServiceComb
  7. 第 5-3 课:线程池——Executors + 面试题
  8. 用python画多来a梦-python3里tkinter中canvas(画板)案例之哆啦A梦
  9. BZOJ4003: [JLOI2015]城池攻占
  10. 开源移动安全测试框架MobSF安装过程踩过的那些坑(一)
  11. silverlight 碰撞检测
  12. JMeter 请求报Response code:415错误
  13. 10种方法缓解所显示器造成的眼睛疲劳
  14. 智能型电话远程遥控器
  15. 证明最小码距与纠检错图像_详解差错控制之码距、检错与纠错
  16. 京东登录滑条验证破解 -- 纯js方法
  17. flutter常用库整理
  18. 代码编程在线运行网站
  19. MapReduce分布式编程模型
  20. Conflux 生态项目扶持计划首批扶持项目出炉

热门文章

  1. LeetCode 783. 二叉搜索树结点最小距离(中序遍历)
  2. 查看宝塔面板账号密码命令_宝塔面板升级到最新版图文教程
  3. Qt利用avilib实现录屏功能_openlayers6结合geoserver利用WFS服务实现图层编辑功能(附源码下载)...
  4. python1到n的所有排列_非递归输出1-N的全排列的方法详解
  5. Hadoop学习之整体介绍及环境搭建
  6. Android官方开发文档Training系列课程中文版:通知用户之大视图通知
  7. Google 与 GitHub 结盟,为保护软件供应链而战!
  8. 对xml操作的主要方法[轉]
  9. 【Redis】三、Redis安装及简单示例
  10. 江西财经大学第二届程序设计竞赛同步赛 H大时钟 (扩展欧几里得)