python - 在正则表达式字符串搜索后查找标记(单词)索引的有效方法

标签 python regex perl string

我需要在另一个字符串 y 中执行一个字符串 x 的正则表达式搜索,但是我需要知道在使用其他一些正则标记化(拆分)字符串 y 之后命中的第一个字符的标记(单词)索引表达式(例如空格)。第一个正则表达式可能会找到一个子串,所以我不能保证它会停在标记(单词)的开头。

实现这个的最佳算法是什么。一个简单的方法如下:

  1. 使用第一个正则表达式在y中搜索x,得到字符偏移量z
  2. 使用第二个正则表达式将 y 拆分为一个元素数组
  3. 遍历元素数组,将每个项目的长度添加到变量 LENGTH,并将计数器 COUNTER 加 1
  4. 当LENGTH大于或等于z时停止循环
  5. 命中第一个字符的token索引就是COUNTER的值

(这里假设split函数将拆分字符(如空格)存储为数组元素,这是非常浪费的。

一个具体(简单)的例子:假设我想知道在字符串“The moon is made of cheese”中搜索“ade”的标记(单词)索引。该函数应该返回答案:3(对于零索引数组)。

==编辑==
当正则表达式搜索跨越标记边界时,该算法也需要工作。例如,在“The moon is made of cheese”中搜索“de of ch”时,它应该再次返回索引“3”。

最佳答案

根据您的更新:

#!/usr/bin/perl -l
use strict;
use warnings;

my $string = "The moon is made of cheese";
my $search = 'de of ch';
my $pos = index($string, $search);
if ($pos != -1) {
    my $substr = substr($string, 0, $pos);
    my @words = split /\s+/, $substr;
    print "found in word #", $#words, "\n";
} else {
    print "not found\n";
}

输出:

found in word #3

关于python - 在正则表达式字符串搜索后查找标记(单词)索引的有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6056236/

相关文章:

python - 在 python 中第 n 次出现主题标签之前拆分单词中的字符串

jquery - 使用正则表达式验证 URL 中的空格

perl - MIME::Lite 包无效的路由地址

python - 在 Python 中定义梯度和 hessian 函数

python - 更改 Bokeh 标签注释的文字大小

c# - 正则表达式与包含 4 个组的字符串不匹配

Perl 如何将两个或多个 Excel 文件合并为一个(多个工作表)?

perl - XPath Perl 获取属性值

javascript - Python - 检测浏览器关闭以杀死网络服务器

javascript - 使用 lodah\handlebar 模板或任何其他 JS 库将 javascript 数组列表格式化为特定格式