有没有办法回头忽略正则表达式中的特定字母?

iStudLion

我需要有关正则表达式的帮助,(长话短说,我正在为“ Papiamento”语言(在ABC群岛(加勒比海)中使用的一种语言)创建语法检查器,有些单词可以缩写,我不确定如何去往后看而忽略一封信)

我有“来”(吃)这个词,“吃”一词是“ comiendo”。看看如何在“ m”和“ e”之间添加“ i”?我试图使我的正则表达式仍然能够识别带有或不带有后缀“ iendo”的“ come”一词,一个简单的解决方法是添加一个非捕获组(不一定,我只是使用非捕获组,我不需要捕获它。)并单独检查两个/com(?:iendo|e)?/单词,但是我处理的单词超过一万六千个,为每个单词单独添加一个正则表达式效率不高。

我的问题是:有没有办法回头看而忽略字母“ e”?

/(come((?<=e)iendo))/ 但也忽略了'e',此正则表达式仅检查“ come”和“ comeiendo”(不正确)


为了更清楚一点,我使用了string[]所有单词,例如{ "come", "bisti", "pasa" }让我们使用此数组,它们都是不定式形式的动词。我希望正则表达式能够以其不定形式和正在执行操作的形式(gerund)进行检测。“ come”是动词的不定式形式,“ comiendo”是动名词。

在我的正则表达式中,我有它

string[] words = { "come", "bisti", "pasa" };
string pattern = $@"/({string.Join("|", words)})/";

// which is same as:
string pattern = @"/(come|bisti|pasa)/";

但是它只是检查不定式形式,根据动词的最后一个字母,动名词多数时候以“ ando”或“ iendo”结尾。但是在这种情况下,我只想关注“ come”和“ comiendo”,因为它是唯一一个用“ iendo”替换最后一个字母(“ e”)的字母,(其他动词只是将“ ndo”附加到结束)。

因此,对于正则表达式,我唯一能想到的就是回看动词是否以“ e”结尾,然后忽略“ e”,并检查动词(不带“ e”)(“ com”)以及后缀(“ iendo”)。

“ come” =>“ com” +“ iendo”

这是我所能得到的

string[] words = { "come", "bisti", "pasa" };
string pattern = $@"/((?:{string.Join("|", words)})(?:(?<=e)iendo|(?<=a)ndo)?)/";

// which is same as
string pattern = @"/((?:come|bisti|pasa)(?:(?<=e)iendo|(?<=a)ndo)?)/";

但该正则表达式仅适用于“ comeiendo”,而不适用于“ comiendo”

在此处输入图片说明

Dmo

您应该有一个包含所有不定式动词(索引列)的数据库。如果语言没有例外(请理解:您总是只删除最后一个字母以获取根),那么无穷大的形式就足够了。否则,在数据库中,您将需要另一列来定义单词的词根。替代方法:使用根形式作为密钥。如果有语言例外,请将所有有用的共轭形式添加到新列中。

通过使用检测不定式和其他共轭形式的简单正则表达式,您可以检查每个匹配项是否确实是动词而不是假阳性。

“ Comiendo”将是错误肯定的,因为数据库中没有动词具有该键。

/(\w*ndo\b|\w*a\b|\w*i\b|\w*e\b)/gm

配套实例 考虑到要知道的单词数量,在正则表达式中使用所有单词并不是一个好选择,而是第二次使用数据库进行验证,我认为这样做是正确的:对于大量数据,select将很快。

        var wordsFinder = new Regex(@"(\w*ndo\b|\w*a\b|\w*i\b|\w*e\b)", RegexOptions.Multiline | RegexOptions.IgnoreCase);

        foreach (Match match in wordsFinder.Matches(inputText))
        {
            var word = match.Value.ToLower();
            string infinitiveForm = null;
            if (word.EndsWith("iendo"))
                infinitiveForm = $"{word.Substring(0, word.Length - "iendo".Length)}e"; // not tested, please adapt :)
            else if (word.EndsWith("ando"))
                infinitiveForm = $"{word.Substring(0, word.Length - "ando".Length)}a";
            else
                infinitiveForm = word;

            // now check for infinitiveForm in the database
        }

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

有没有办法使用正则表达式匹配ansible中的主机?

来自分类Dev

有没有办法遍历带有正则表达式的列表?

来自分类Dev

有没有办法使此正则表达式更有效?

来自分类Dev

有没有办法使用正则表达式多次匹配花括号内的特定模式?

来自分类Dev

有没有办法在Python 2中使用带有正则表达式的memoryview?

来自分类Dev

有没有办法缩短此正则表达式?

来自分类Dev

有没有办法只将顶级括号与正则表达式匹配?

来自分类Dev

有没有办法在Perl正则表达式中使''表示\ s *?

来自分类Dev

awk:有没有办法过滤不匹配的正则表达式?

来自分类Dev

有没有办法压缩以下正则表达式替换?(javascript)

来自分类Dev

有没有办法结合这两个正则表达式?

来自分类Dev

有没有办法缩短此正则表达式?

来自分类Dev

有没有办法只将顶级括号与正则表达式匹配?

来自分类Dev

awk:有没有办法过滤不匹配的正则表达式?

来自分类Dev

有没有办法使用正则表达式在单行上复制字符?

来自分类Dev

有没有办法正则表达式多行 html 块?

来自分类Dev

有没有办法使用正则表达式设置路径?

来自分类Dev

有没有办法在正则表达式(perl样式)中强制优先级

来自分类Dev

有没有办法将条件应用于熊猫中的正则表达式?

来自分类Dev

有没有办法“调用”正则表达式中已经匹配的char序列?

来自分类Dev

有没有办法使用正则表达式来自动填充bash中的文件名?

来自分类Dev

有没有办法使用正则表达式从字符串的两个斜杠之间获取最后三个字母

来自分类Dev

FCM:有没有办法订阅与正则表达式匹配的所有主题?

来自分类Dev

有没有办法在Vim正则表达式中允许\ w在字符集中?

来自分类Dev

有没有办法使Perl正则表达式不区分大小写?

来自分类Dev

有没有办法在cmake上使用正则表达式查找目录路径?

来自分类Dev

有没有办法指定一个与其他都不匹配的正则表达式?

来自分类Dev

有没有办法在PHP中的十进制数中的某个点之后进行正则表达式和删除?

来自分类Dev

有没有办法在Python的re.sub()中的替换字符串中使用正则表达式?

Related 相关文章

  1. 1

    有没有办法使用正则表达式匹配ansible中的主机?

  2. 2

    有没有办法遍历带有正则表达式的列表?

  3. 3

    有没有办法使此正则表达式更有效?

  4. 4

    有没有办法使用正则表达式多次匹配花括号内的特定模式?

  5. 5

    有没有办法在Python 2中使用带有正则表达式的memoryview?

  6. 6

    有没有办法缩短此正则表达式?

  7. 7

    有没有办法只将顶级括号与正则表达式匹配?

  8. 8

    有没有办法在Perl正则表达式中使''表示\ s *?

  9. 9

    awk:有没有办法过滤不匹配的正则表达式?

  10. 10

    有没有办法压缩以下正则表达式替换?(javascript)

  11. 11

    有没有办法结合这两个正则表达式?

  12. 12

    有没有办法缩短此正则表达式?

  13. 13

    有没有办法只将顶级括号与正则表达式匹配?

  14. 14

    awk:有没有办法过滤不匹配的正则表达式?

  15. 15

    有没有办法使用正则表达式在单行上复制字符?

  16. 16

    有没有办法正则表达式多行 html 块?

  17. 17

    有没有办法使用正则表达式设置路径?

  18. 18

    有没有办法在正则表达式(perl样式)中强制优先级

  19. 19

    有没有办法将条件应用于熊猫中的正则表达式?

  20. 20

    有没有办法“调用”正则表达式中已经匹配的char序列?

  21. 21

    有没有办法使用正则表达式来自动填充bash中的文件名?

  22. 22

    有没有办法使用正则表达式从字符串的两个斜杠之间获取最后三个字母

  23. 23

    FCM:有没有办法订阅与正则表达式匹配的所有主题?

  24. 24

    有没有办法在Vim正则表达式中允许\ w在字符集中?

  25. 25

    有没有办法使Perl正则表达式不区分大小写?

  26. 26

    有没有办法在cmake上使用正则表达式查找目录路径?

  27. 27

    有没有办法指定一个与其他都不匹配的正则表达式?

  28. 28

    有没有办法在PHP中的十进制数中的某个点之后进行正则表达式和删除?

  29. 29

    有没有办法在Python的re.sub()中的替换字符串中使用正则表达式?

热门标签

归档