繁体   English   中英

Python RegEx捕获数组名称和大小之间的空白

[英]Python RegEx to Catch White Space Between Array Name and Size

我在python脚本中使用正则表达式来搜索文件以查找变量声明。 这是我到目前为止的内容:

ret1 = re.compile(r'^\s*(volatile|register|typedef)?\s?([\w<>:*, ]+?)\s+([\w:]+)[\w:\[\]]*\s*;\s*$')

ret2 = ret1.match(nextLineInFile)

print("Group 2: ", ret2.group(2))#variable type
print("Group 3: ", ret2.group(3))#variable name

在代码的稍后部分,我将使用分组来捕获变量类型和变量名称。 我有以下输入:

long myArray1[2];
long myArray2 [2];
long long myArray3[2];
long long myArray4 [2];

我的RegEx只找到myArray1和myArray3。 我需要它找到所有四个声明。 我尝试了以下方法:

ret = re.compile(r'^\s*(volatile|register|typedef)?\s?([\w<>:*, ]+?)\s+([\w:]+)\s*[\w:\[\]]*\s*;\s*$')

这样可以完美捕获myArray1,myArray2和myArray4。 但是,现在myArray3返回了一个变量类型“ long”和变量名“ long”。 我究竟做错了什么?

在修改了您的输入和当前正则表达式后,我得到以下表达式: ^\\s*(volatile|register|typedef)?\\s?([\\w<>:*, ]+?)\\s+([\\w:]+)\\s?\\[\\d+\\]\\s*;\\s*$

我不是在寻找arrayName[size]arrayName [size]作为两个单独的元素,而是在寻找数组的名称([\\w<>:*, ]+?)后面是否跟空格\\s? ,然后按大小为[\\ d +]的方括号。

您可以在https://regex101.com/r/6KDHjj/1上测试表达式

如果您对我的表达有任何疑问,或者它不能按预期工作,请不要犹豫。

我刚刚想到的另一种可能性是使与数组类型匹配的部分为贪婪的: ^\\s*(volatile|register|typedef)?\\s?([\\w<>:*, ]+)\\s+([\\w:]+)\\s*[\\w:\\[\\]]*\\s*;\\s*$
我只是删除了([\\w<>:*, ]+?)末尾的询问标记以获取此行为。

这是对第二种可能性的检验: https : //regex101.com/r/WMWC93/1

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM