查找所有正则表达式匹配的索引?

     2023-02-23     211

关键词:

【中文标题】查找所有正则表达式匹配的索引?【英文标题】:Find the indexes of all regex matches? 【发布时间】:2011-03-31 23:29:49 【问题描述】:

我正在解析其中可能包含任意数量的引号字符串的字符串(我正在解析代码,并试图避免 PLY)。我想知道是否引用了子字符串,并且我有子字符串索引。我最初的想法是使用 re 查找所有匹配项,然后找出它们所代表的索引范围。

似乎我应该将 re 与\"[^\"]+\"|'[^']+' 之类的正则表达式一起使用(我目前正在避免处理三重引号和此类字符串)。当我使用 findall() 时,我会得到一个匹配字符串的列表,这有点好,但我需要索引。

我的子字符串可能和c 一样简单,我需要弄清楚这个特定的c 是否真的被引用了。

【问题讨论】:

听起来这个工作不适合正则表达式。 【参考方案1】:

这就是你想要的:(source)

re.finditer(pattern, string[, flags]) 

返回一个迭代器产生 MatchObject 实例 字符串中 RE 模式的非重叠匹配。字符串是 从左到右扫描,并按找到的顺序返回匹配项。空的 匹配项包含在结果中,除非它们触及 另一场比赛。

然后您可以从 MatchObjects 中获取开始和结束位置。

例如

[(m.start(0), m.end(0)) for m in re.finditer(pattern, string)]

【讨论】:

请注意,您实际上可以使用m.span() 来获取(m.start(), m.end())(并且默认组参数为0,因此可以省略)。 太棒了。正是在寻找这个。 注意,这种情况下会失败:base_str = "GATATATGCATATACTT" sub_str = "ATAT",结果应该是[(1,5), (3, 7), (9, 13)] , 但结果是 [(1, 5), (9, 13)] @unionx: finditer(),根据文档,返回非重叠匹配。 一个much more recent example,使用2018语法【参考方案2】:

#获取所有出现的索引

S = input() # Source String 
k = input() # String to be searched
import re
pattern = re.compile(k)
r = pattern.search(S)
if not r: print("(-1, -1)")
while r:
    print("(0, 1)".format(r.start(), r.end() - 1))
    r = pattern.search(S,r.start() + 1)

【讨论】:

【参考方案3】:

这应该可以解决您的问题 模式=r"(?=(\"[^\"]+\"|'[^']+'))"

然后使用以下获取所有重叠索引,

indicesTuple=[(mObj.start(1),mObj.end(1)-1) for mObj in re.finditer(pattern,input)]

【讨论】:

如何制作将多个模式匹配到同一索引的python正则表达式

】如何制作将多个模式匹配到同一索引的python正则表达式【英文标题】:Howtomakepythonregexwhichmatchesmultiplepatternstosameindex【发布时间】:2011-08-3108:16:15【问题描述】:是否可以获得所有重叠匹配,它们从相同的索引开始,但来自不... 查看详情

正则表达式查找所有匹配项,除了那些被字符包围的匹配项

】正则表达式查找所有匹配项,除了那些被字符包围的匹配项【英文标题】:RegexfindallmatchesEXCEPTthosesurroundedbycharacters【发布时间】:2021-09-0823:47:35【问题描述】:我有以下正则表达式来查找我的字符串中的所有word实例。在以下... 查看详情

试图找到所有正则表达式匹配的索引,但有些被遗漏了

】试图找到所有正则表达式匹配的索引,但有些被遗漏了【英文标题】:Tryingtofindindicesofallregexmatches,butsomebeingleftout【发布时间】:2021-05-1710:00:58【问题描述】:我想找到字符串中第一个“e”之后每个元音的索引。由于您无法直... 查看详情

java示例代码_在android中查找正则表达式的所有匹配项

java示例代码_在android中查找正则表达式的所有匹配项 查看详情

从文件中读取索引“n”低于与给定正则表达式匹配的行的所有行

】从文件中读取索引“n”低于与给定正则表达式匹配的行的所有行【英文标题】:Readfromfilealllinesthathaveanindex`n`lowerthanthelinesthatmatchagivenregex【发布时间】:2017-11-1305:26:10【问题描述】:我想从文件file.txt中读取索引n低于匹配给... 查看详情

如何使用正则表达式查找具有特定起始字符串的所有匹配项? [复制]

】如何使用正则表达式查找具有特定起始字符串的所有匹配项?[复制]【英文标题】:Howtousearegularexpressiontofindallmatcheswithspecificstartingstrings?[duplicate]【发布时间】:2020-03-0911:38:10【问题描述】:我已经使用bs4爬取了一些文本,我... 查看详情

正则表达式3--查找

用正则表达式执行查找命令,则需要用正则对象,其规则和执行顺序如下:指定为字符串的正则表达式必须首先被便以为此类的实例。然后,可将得到的正则对象匹配任意的字符串用于创建Mather对象,执行匹配所涉及的所有状态... 查看详情

正则表达式(代码片段)

创建正则表达式:    字面量创建:varreg=/a/g;    构造函数创建:varreg=newRegExp("a","g"); 修饰符:    i: 不区分大小写  g: 全局从头查找  m: 多行匹配 正则方法:    test():判断是... 查看详情

从 pandas 数据框列中查找所有正则表达式匹配项

】从pandas数据框列中查找所有正则表达式匹配项【英文标题】:findingallregexmatchesfromapandasdataframecolumn【发布时间】:2017-07-1118:54:52【问题描述】:我正在尝试从数据框中提取一些数据,但是以下查询仅提取第一个匹配项并忽略其... 查看详情

python)使用正则表达式查找所有匹配项(从 re.search 更改为 re.findall)[重复]

】python)使用正则表达式查找所有匹配项(从re.search更改为re.findall)[重复]【英文标题】:python)findallmatchesusingregex(changedtore.findallfromre.search)[duplicate]【发布时间】:2019-07-2316:49:45【问题描述】:我正在尝试提取关键字(Exhibit)旁... 查看详情

js正则表达式

...行多行匹配。方括号方括号用于查找某个范围内的字符:表达式描述[abc]查找方括号之间的任何字符。[^abc]查找任何不在方括号之间的字符。[0-9]查找任何从0至9的数字。[a-z]查找任何从小写a到小写z的字符。[A-Z]查找任何从大写A... 查看详情

正则表达式

1正则表达式的应用场景:查找所有包含Linux的行取出abc开头的所有单词匹配两位数、密码、qq号、身份证号等2正则表达式的目标查找、取出、匹配符合条件的字符和字符串3所有字符的格式 grep ’字符’ 文件名 &nbs... 查看详情

正则表达式匹配所有注释 //, /* */

】正则表达式匹配所有注释//,/**/【英文标题】:regextomatchallcomments//,/**/【发布时间】:2017-05-2200:14:33【问题描述】:我正在尝试编写正则表达式来查找给定文件中的所有cmets。我应该处理的cmets是多线通信,例如/*comments.ismultiline... 查看详情

关于正则表达式

/i:忽略大小写/g  (全文查找出现的所有匹配字符)/m多行查找/gi全文查找忽略大小写/ig全文查找忽略大小写:将下一个字符标记为一个特殊字符、或一个原义字符、或一个向后引用、或一个八进制转义符。例如,‘n‘匹配字... 查看详情

#grep‘linux’filename命令查找的是啥文件?

...统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。grep全称是GlobalRegularExpressionPrint,表示全局正则表达式版本,它的使用权限是所有用户。2.格式grep[options]3.主要参数[options]主要参... 查看详情

正则表达式查找静态(非最终)变量

】正则表达式查找静态(非最终)变量【英文标题】:Regextofindstatic(nonfinal)variables【发布时间】:2010-09-1910:21:53【问题描述】:我正在尝试在我的Eclipse(Java)工作区中进行搜索,以查找非最终静态变量的所有实例。我尝试了各种... 查看详情

用于查找字母字符的前 x 个出现的正则表达式,忽略其他所有内容

】用于查找字母字符的前x个出现的正则表达式,忽略其他所有内容【英文标题】:Regexforfindingfirstxoccurrencesofalphabeticalcharacters,ignoringeverythingelse【发布时间】:2020-08-0314:16:29【问题描述】:我正在尝试编写一个正则表达式来匹配... 查看详情

匹配失败的匹配字符串中的正则表达式索引

】匹配失败的匹配字符串中的正则表达式索引【英文标题】:Regexindexinmatchingstringwherethematchfailed【发布时间】:2010-09-1113:34:16【问题描述】:我想知道是否可以提取给定字符串中正则表达式在尝试匹配时失败的索引位置?例如,... 查看详情