我有一个返回字符串"r'^A Plat'"
并写入文本文件的函数
get_Pat(file)
#process text file and now returns "r'^A Plat'"
最初,我在代码内部进行了硬编码。
pat = r'^A Plat'
use(pat)
现在
pat = get_Pat(file)
use(pat)
但它的抱怨,因为我想它的字符串,而不是正则表达式对象。
我努力了
re.escape(get_Pat(file))
和
re.compile(get_Pat(file))
但它们都不起作用
如何将字符串文字转换为正则表达式对象?
r'^ A Plat'是否等同于re.compile(“ A Plat”)?愚蠢的问题,也许
如果它的use("^A Plat'")
如果它的use("r'^A Plat'")
<--- get_Pat(file)吐出什么东西,则不起作用
我想我的任务只是将字符串r'^ A Plat'转换为^ A Plat。
但是我觉得这只是一个廉价的黑客。
参考方案
做
from ast import literal_eval
pat = literal_eval(get_Pat(file))
。
编辑
艾伦
正如您在评论中写道,您无法导入literal_eval()
,我的上述解决方案对您没有用。
此外,尽管表达了有趣的信息,但其他答案并没有带来其他解决方案。
因此,我提出了一个不使用literal_eval()
的新方法。
import re
detect = re.compile("r(['\"])(.*?)\\1[ \t]*$")
with open('your_file.txt') as f:
pat = f.readline()
if detect.match(pat):
r = re.compile(detect.match(pat).group(2))
else:
r = re.compile(pat)
。
说明:
。
假设有连续的字符r'^Six o\'clock\nJim'
写为* your_file *的第一行
* your_file *第一行的打开和读取会创建对象pat
-其类型在Python 2中为<type 'str'>
在Python 3中为<class 'str'>
-其表示为"r'^Six o\'clock\nJim'"
-它的值是r'^Six o\'clock\nJim'
,也就是说,连续字符r
,'
,^
,S
,i
,x
,,
o
,,\
,'
,c
,l
,o
,c
,k
,\
,n
,J
,i
如果文件中有第二行,则末尾可能还会有“字符” m
。在文件中写入的\n
的末尾与其行尾之间也可能存在空白或制表符(谁知道?)。这就是为什么我关闭正则表达式模式以定义r'^Six o\'clock\nJim'
检测的原因。
因此,我们可能会在感兴趣的字符之后获得其他可能的空白,制表符和换行符,然后如果执行[ \t]*$
,我们将获得例如:
('r', "'", '^', 'S', 'i', 'x', ' ', 'o', '\\', "'", 'c', 'l', 'o', 'c', 'k', '\\', 'n', 'J', 'i', 'm', "'", ' ', ' ', ' ', '\t', '\n')
。
现在,让我们考虑使用表达式print tuple(pat)
获得的对象。
它的值是detect.match(pat).group(2)
,由18个字符组成,其中^Six o\'clock\nJim
和\
和'
是三个不同的字符,其中没有一个转义字符n
和一个转义字符\'
。
该值与我们通过写指令\n
为名称为rawS
的对象rawS获得的值完全相同。
然后,我们可以通过直接编写rawS = r'^Six o\'clock\nJim'
来获得其正则表达式,该正则表达式的模式以r'....'
形式写入文件中。
在我的示例中,文件中写入的字符序列中只有序列r = re.compile(detect.match(pat).group(2))
和\'
。但是前面所有的内容对于该语言的任何Escape Sequences均有效。
换句话说,我们不必怀疑某个函数的作用与值\n
的STRING r'^Six o\'clock\nJim'
中的EXPRESSION "r'^Six o\'clock\nJim'"
相同,
我们直接将r'^Six o\'clock\nJim'
的结果作为r'^Six o\'clock\nJim'
捕获的字符串的值。
。
Nota Bene
在Python 2中,类型detect.match(pat).group(2)
是有限字符集的类型。
它是文件读取内容的类型,在模式<type 'str'>
和模式'r'
下也可以打开。
在Python 3中,类型'rb'
覆盖unicode字符。
但是与Python 3相反,以模式打开的文件的读取内容的类型为<class 'str'>
如果文件以模式'r'
打开,则文件的类型为<type 'str'>
。
然后,我认为上面的代码在Python 3和Python 2中都可以正常工作,因此可以使用<class 'bytes'>
模式打开该文件。
如果应使用'rb'
打开文件,则应将正则表达式模式更改为'r'
。
。
阿法胡
在返回'Response'(Python)中传递多个参数 - python我在Angular工作,正在使用Http请求和响应。是否可以在“响应”中发送多个参数。角度文件:this.http.get("api/agent/applicationaware").subscribe((data:any)... python文件:def get(request): ... return Response(seriali…
Python exchangelib在子文件夹中读取邮件 - python我想从Outlook邮箱的子文件夹中读取邮件。Inbox ├──myfolder 我可以使用account.inbox.all()阅读收件箱,但我想阅读myfolder中的邮件我尝试了此页面folder部分中的内容,但无法正确完成https://pypi.python.org/pypi/exchangelib/ 参考方案 您需要首先掌握Folder的myfo…
R'relaimpo'软件包的Python端口 - python我需要计算Lindeman-Merenda-Gold(LMG)分数,以进行回归分析。我发现R语言的relaimpo包下有该文件。不幸的是,我对R没有任何经验。我检查了互联网,但找不到。这个程序包有python端口吗?如果不存在,是否可以通过python使用该包? python参考方案 最近,我遇到了pingouin库。
Python ThreadPoolExecutor抑制异常 - pythonfrom concurrent.futures import ThreadPoolExecutor, wait, ALL_COMPLETED def div_zero(x): print('In div_zero') return x / 0 with ThreadPoolExecutor(max_workers=4) as execut…
如何用'-'解析字符串到节点js本地脚本? - python我正在使用本地节点js脚本来处理字符串。我陷入了将'-'字符串解析为本地节点js脚本的问题。render.js:#! /usr/bin/env -S node -r esm let argv = require('yargs') .usage('$0 [string]') .argv; console.log(argv…