Python正则表达式在特定字符串后的花括号中查找所有内容
嗨,所以我有点和正则表达式斗争。我有一个rpt文件,需要从中获取特定数据。该文件看起来有点像这样:Python正则表达式在特定字符串后的花括号中查找所有内容,python,regex,python-3.x,Python,Regex,Python 3.x,嗨,所以我有点和正则表达式斗争。我有一个rpt文件,需要从中获取特定数据。该文件看起来有点像这样: lots of text... [MS] { ;Mass % BPI 238.85 0.943 247.64 0.984 378.65 0.990 ... } lots of text... 在这个字符串出现后,我想把所有内容都放在花括号内:[MS]。问题是这个文件中有更多的花括号,它们不仅仅围绕着我需要的数据 我已经尝试过的是: import re file = input("En
lots of text...
[MS]
{
;Mass % BPI
238.85 0.943
247.64 0.984
378.65 0.990
...
}
lots of text...
在这个字符串出现后,我想把所有内容都放在花括号内:[MS]。问题是这个文件中有更多的花括号,它们不仅仅围绕着我需要的数据
我已经尝试过的是:
import re
file = input("Enter file path: ")
if len(file) < 1:
file = "path"
handle = open(file)
pattern = r'^([-0-9\.eE+]+)[ \t]*(;|,)?[ \t]*([-0-9\.eE+]*)$'
findings = re.findall(pattern, handle)
print(findings)
#and then making a single dict out of it with key-value pairs
重新导入
文件=输入(“输入文件路径:”)
如果len(文件)<1:
file=“path”
句柄=打开(文件)
pattern=r'^([-0-9\.eE+])[\t]*(;|,)?[\t]*([-0-9\.eE+]*)$'
调查结果=关于findall(模式、手柄)
印刷(调查结果)
#然后用键值对把它做成一个dict
但这并没有给我所需要的一切,它返回了一些值,但不是全部
最后,我希望将花括号内的数字作为字典(例如:Key:238.85,Value:0.943),以便以后可以绘制它
注:体量和BPI“列”之间的空格为制表符。执行多阶段提取过程。第一阶段是一个正则表达式,它在MS之后提取括号之间的内容:
re.search(r"\[MS\]\s*{([^}]+)}", s).group(0)
从那里您可以逐行解析数据。您可以在
{
和}
之后提取[MS]
之间的所有块,然后从块中提取所有必要的数据:
import re
results = []
with open(path_to_file, 'r') as r:
for block in re.findall(r'\[MS\]\s*{([^{}]+)}', r.read()):
results.extend(re.findall(r'^(\d[\d.]*)\t(\d[\d.]*)$', block, re.M))
print(dict(results))
见
块匹配正则表达式
-文字\[MS\]
文本[MS]
-0+空格\s*
-a{
字符{
-第1组(这是([^{}]+)
将返回的内容):除re.findall
和{
之外的任何1+字符}
-a}
字符}
-行的开始(由于^
)re.M
-组1(键):一个数字,然后是任何0+数字或点(\d[\d.]*)
-一个选项卡\t
-第2组(值):一个数字,然后是任何0+数字或点(\d[\d.]*)
-行尾(由于$
)re.M
[MS]
之后,块内是否还会有{
和}
吗?没有,在该块之后,它会再次关闭,但没有任何内部。是否有多个块,或者它总是单个/唯一的?如果使用,您可能会使用基于正则表达式的。现在无法给出答案。@Wiktor Stribiżew yes如果我使用了很多答案,它会给我一个错误:TypeError:预期的字符串或字节,如object@bimarian这只意味着您没有将数据作为单个字符串传递给re
方法。在问题中显示所有相关代码。Ok将在question@bimarian你是说\[MS\]
可以是[APPLE]
等吗。?请尝试re.findall(r'\[{}\]\s*{([^{{}]+)}}.format(re.escape(key)),r.read())