本文将介绍如何在python中将正则表达式与可选字符一起使用?的详细情况,特别是关于python正则任意字符的相关信息。我们将通过案例分析、数据研究等多种方式,帮助您更全面地了解这个主题,同时也将涉及
本文将介绍如何在python中将正则表达式与可选字符一起使用?的详细情况,特别是关于python 正则 任意字符的相关信息。我们将通过案例分析、数据研究等多种方式,帮助您更全面地了解这个主题,同时也将涉及一些关于js中正则表达式与Python中正则表达式的区别、python中正则表达式与模式匹配、Python正则表达式-为什么字符串结尾($和 Z)无法与组表达式一起使用?、使用正则表达式在python中将一堆名称转换为JSON格式的知识。
本文目录一览:- 如何在python中将正则表达式与可选字符一起使用?(python 正则 任意字符)
- js中正则表达式与Python中正则表达式的区别
- python中正则表达式与模式匹配
- Python正则表达式-为什么字符串结尾($和 Z)无法与组表达式一起使用?
- 使用正则表达式在python中将一堆名称转换为JSON格式
如何在python中将正则表达式与可选字符一起使用?(python 正则 任意字符)
说我有一个字符串
"3434.35353"
和另一个字符串
"3593"
我如何制作一个能够同时匹配两者的正则表达式,而不必在另一个失败的情况下将模式设置为其他形式呢?我知道\d+
会匹配3593
,但不会对进行任何操作3434.35353
,但是(\d+\.\d+
)仅会匹配带有小数的那个,而不会返回与匹配的匹配项3593
。
我希望m.group(1)
返回:
"3434.35353"
要么
"3593"
js中正则表达式与Python中正则表达式的区别
今天女票让我帮她写一个js中的正则,来提取电话号码,对于正则规则来说,js与python是基本没有区别的,重点的区别是在一些函数与方法中。
python中的正则提取:
import re
str = ''asfasdfgasffas青蛙无法·啊沙发上,。,从 dw2efdrqw15894648760asfasf'' \
''asf,./asf029-81464970jhklasdnf,wsdn15888888888''
patt = ''1[3,5,8,7]\d{9}|0\d{2}-\d{8}''
data = re.findall(patt, str)
print(data)
js中的正则提取:
<script>
$(''#id1'').click(function () {
var test = ''asfasdfhakj啊是法律dsh15894648760asfadf欺负我,。, 。qwe jfwj029-81464970asfafaflame'';
var patt= /1[3,5,8,7]\d{9}|0\d{2}-\d{8}/g;
alert(test.match(patt))
})
</script>
两者主要区别:
(1)在python中,正则表达式其本质上是一个字符串,所以用引号括起来,但是在JS中,正则必须以斜杠符号 / 来包围,如
/1[3,5,8,7]\d{9}|0\d{2}-\d{8}/ 并且不能加引号。
(2)在匹配模式中,js仅仅支持 g 全局搜索, i忽略大小写, m 多行匹配这三种, 但是python支持更多。
(3)js中匹配并替换是replace函数,在python中是sub() js中的replace无论使用正则表达式还是字符串本身,默认情况下仅仅替换第一个匹配项。
(4)JS以 / 来标识正则表达式,以引号标识字符串。
(5) JS与Python都有match函数,但是意义大不相同。Python中match方法是指从字符串开始进行匹配,但是在js中match方法是类似于匹配全部,
与python中的findall()非常接近。但是还是有区别滴: 如果在js的正则中后一个/后加上g,那就与python中的findall一毛一样。会返回所有匹配到的值,
但是如果没有g,就只会返回第一个匹配到的值
(6) JS 中的search()与Python中字符串的find方法和正则表达式re模块中的search方法一样, 但是js会返回字符串的下标索引,而非字符串。
还有疏忽的地方,来日想起来再补充吧。这儿有个别的大佬写的,栗子啥的挺全的:
大佬链接:https://www.cnblogs.com/dyfblog/p/6077122.html
想了解更多Python关于爬虫、数据分析的内容,欢迎大家关注我的微信公众号:悟道Python
python中正则表达式与模式匹配
一、前言
在之前找工作过程中,面试时经常被问到会不会python,懂不懂正则表达式。心里想:软件的东西和芯片设计有什么关系?咱也不知道因为啥用这个,咱也不敢问啊!在网上搜索到了一篇关于脚本在ASIC领域中应用的文章(原文见参考文献1),里边提到了python的用武之地:
本文以《Python编程快速上手——让繁琐工作自动化》书中的示例,讲述利用python实现文本中特定内容提取的方式。
二、提取特定内容示例
需求:找出文本中所有的电话号码和邮件地址。设计方案:在剪贴板的文本中提取出所有与电话号码和邮件地址格式匹配的字符串。有了需求和设计方案,现根据电话号码和邮箱地址格式编写正则表达式。先来看看程序代码,再做讲解。


1 import pyperclip,re
2
3 #phoneNumber:415-555-4242 x331
4 #email address:info@nostarch.com
5
6 phoneRegex = re.compile(r''''''( #0 all
7 (\d{3}|\(\d{3}\))? #1 area code
8 (\s|-|\.)? #2 separator
9 (\d{3}) #3 first 3 digits
10 (\s|-|\.) #4 separator
11 (\d{4}) #5 last 4 digits
12 (\s*(ext|x|ext\.)\s*(\d{2,5}))? #6 7 8extension
13 )'''''',re.VERBOSE)
14
15 emailRegex = re.compile(r''''''( #0 all
16 [a-zA-Z0-9._%+-]+ # username
17 @ # @ symbol
18 [a-zA-Z0-9.-]+ # domain name
19 (\.[a-zA-Z]{2,4}) #1 dot-something
20 )'''''',re.VERBOSE)
21
22 #Find matches in clipboard text.
23 text = str(pyperclip.paste())
24 mo1 = phoneRegex.findall(text)
25 mo2 = emailRegex.findall(text)
26 print(mo1)
27 print(mo2)
28 matches = []
29 for groups in phoneRegex.findall(text):
30 phoneNum = ''-''.join([groups[1],groups[3],groups[5]])
31 if groups[8] != '''':
32 phoneNum += '' x'' + groups[8]
33 matches.append(phoneNum)
34
35 for groups in emailRegex.findall(text):
36 matches.append(groups[0])
37
38 #Copy results to the clipboard
39 if len(matches) > 0:
40 pyperclip.copy(''\n''.join(matches))
41 print(''Copied to clipboard:'')
42 print(''\n''.join(matches))
43 else:
44 print(''No phone numbers or email address found.'')
此处电话号码的格式是:三个数字组成的区号(可选),三个数字,四个数字,任意数空格+ext/x/ext.+任意数空格+2到5个数字组成的分机号(可选)。每个部分间以“-”号连接。邮箱地址格式:由字母、数字以及_%+-符号组成的用户名,@符号以及.后的域名,域名由2-4个字母和数字集合组成。根据上述模式可编写对应的正则表达式。
python的模式匹配有一个简单固定的套路,import导入re包,regex = re.compile(''''''<正则表达式>'''''')。<模式匹配的内容列表> = regex.findall(<待搜索字符串>)。三步搞定。编写正则表达式时,在字符串前加r防止字符转义。将各个部分分组并换行以提高代码的可读性,此时需要将re.VERBOSE作为re.compile()函数的第二个参数传入来忽略表达式中的空白和换行。
三、运行结果
复制代码首部注释掉的文本,然后运行程序。结果如下:
前两行打印出了匹配内容的列表,之后以自定义的统一格式打印欲搜索的内容。程序运行结果正确。本文以一个小例子测试了python正则表达式提取文本特定内容的功能,之后想尝试利用python自动生成verilogHDL中module的例化模板。
参考文献:
1 ExASIC https://mp.weixin.qq.com/s/qhG9f0WTzUruHgzgldEHSQ
原文出处:https://www.cnblogs.com/moluoqishi/p/10825221.html
Python正则表达式-为什么字符串结尾($和 Z)无法与组表达式一起使用?
在Python 2.6中。似乎字符串末尾的那个标记$
和\Z
不符合组表达式兼容。佛的例子
import rere.findall("\w+[\s$]", "green pears")
退货
[''green '']
(因此$
实际上无效)。并使用
re.findall("\w+[\s\Z]", "green pears")
导致错误:
/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/re.pyc in findall(pattern, string, flags) 175 176 Empty matches are included in the result."""--> 177 return _compile(pattern, flags).findall(string) 178 179 if sys.hexversion >= 0x02020000:/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/re.pyc in _compile(*key) 243 p = sre_compile.compile(pattern, flags) 244 except error, v:--> 245 raise error, v # invalid expression 246 if len(_cache) >= _MAXCACHE: 247 _cache.clear()error: internal: unsupported set operator
为什么这样工作以及如何解决?
答案1
小编典典甲[..]
表达式是一个 字符组
,这意味着它会匹配任何一个字符包含在其中。因此,您正在匹配文字$
字符。字符组始终适用于一个输入字符,因此永远不能包含锚点。
如果要匹配空格字符 或 字符串的结尾,请改用非捕获组,将其与|
或选择器结合使用:
r"\w+(?:\s|$)"
或者,查看\b
单词边界锚点。它会匹配\w
组开始或结束的任何位置(因此,它会锚定到文本中\w
字符之前或之后的\W
字符,或者字符串的开始或结尾的点)。
使用正则表达式在python中将一堆名称转换为JSON格式
定义您想要的列表,然后使用 json.dump
将其写入文件:
import json
names = ['Anna','Jay','Lea','Arthur']
with open('names.json','w') as f:
json.dump(names,f)
如果您尝试从文件中读取 JSON 数组,
with open('names.json') as f:
names = json.load(f)
我们今天的关于如何在python中将正则表达式与可选字符一起使用?和python 正则 任意字符的分享已经告一段落,感谢您的关注,如果您想了解更多关于js中正则表达式与Python中正则表达式的区别、python中正则表达式与模式匹配、Python正则表达式-为什么字符串结尾($和 Z)无法与组表达式一起使用?、使用正则表达式在python中将一堆名称转换为JSON格式的相关信息,请在本站查询。
本文标签: