搜索多个动词,除非最后一个动词后跟逗号
Search for multiple verbs except if the last one is followed by a comma
我正在使用正则表达式在语料库中搜索多个动词的簇。所有单词都标记为单词 class,因此任何句子都可能如下所示:
I.prn love.vrb dogs.noun
我希望我的正则表达式匹配所有连续出现的 2 个或更多动词的实例,除非最后一个动词后跟逗号。请参阅下面的两个首选匹配实例:
I.prn have.vrb been.vrb using.vrb regex.noun # match = have.vrb been.vrb using.vrb
the.det functions.noun I.prn have.vrb been.vrb using.vrb, .... # match = NULL
我当前的正则表达式看起来像这样(我觉得这不是最佳选择):
((([a-z])+(\.vrb))(([a-z]|([ ]{1,}))+(\.vrb)){1,})(?!,)
它会检查 by.vrb 之后的任何单词,然后检查至少 1 个以 .vrb 结尾且中间有任意数量空格的单词的其他实例。我希望它这样做,除非末尾有逗号,但我当前的表达式为我提供了与前一句话的以下匹配(这不是我想要的):
the.det functions.noun I.prn have.vrb been.vrb using.vrb, .... # match = have.vrb been.vrb
有什么方法可以改变我的正则表达式,使其在上述句子的情况下不产生匹配(即最后一个动词后跟一个逗号)?我希望我能很好地解释我的问题!
我保存了包含以下文本的文件 text.txt
:
I.prn have.vrb been.vrb using.vrb regex.noun
the.det functions.noun I.prn have.vrb been.vrb using.vrb,
the.det programs.noun I.prn have.vrb been.vrb writing.vrb
然后我运行下面的管道命令:
egrep -o '(([A-Za-z]+\.vrb[ ]*)+[A-Za-z]+\.[^v][^r][^b])|(([A-Za-z]+\.vrb[ ]*)+)$' text.txt | egrep -o '([A-Za-z]+\.vrb[ ]*)+'
并得到以下输出(根据需要):
have.vrb been.vrb using.vrb
have.vrb been.vrb writing.vrb
第一个正则表达式获取动词链(仅space-separated)和后面的单词(non-verb)或者它获取动词链(仅space-separated)后跟eol.
第二个正则表达式过滤掉 non-verb 单词,如果它存在的话。
希望这对您有所帮助。
我正在使用正则表达式在语料库中搜索多个动词的簇。所有单词都标记为单词 class,因此任何句子都可能如下所示:
I.prn love.vrb dogs.noun
我希望我的正则表达式匹配所有连续出现的 2 个或更多动词的实例,除非最后一个动词后跟逗号。请参阅下面的两个首选匹配实例:
I.prn have.vrb been.vrb using.vrb regex.noun # match = have.vrb been.vrb using.vrb
the.det functions.noun I.prn have.vrb been.vrb using.vrb, .... # match = NULL
我当前的正则表达式看起来像这样(我觉得这不是最佳选择):
((([a-z])+(\.vrb))(([a-z]|([ ]{1,}))+(\.vrb)){1,})(?!,)
它会检查 by.vrb 之后的任何单词,然后检查至少 1 个以 .vrb 结尾且中间有任意数量空格的单词的其他实例。我希望它这样做,除非末尾有逗号,但我当前的表达式为我提供了与前一句话的以下匹配(这不是我想要的):
the.det functions.noun I.prn have.vrb been.vrb using.vrb, .... # match = have.vrb been.vrb
有什么方法可以改变我的正则表达式,使其在上述句子的情况下不产生匹配(即最后一个动词后跟一个逗号)?我希望我能很好地解释我的问题!
我保存了包含以下文本的文件 text.txt
:
I.prn have.vrb been.vrb using.vrb regex.noun
the.det functions.noun I.prn have.vrb been.vrb using.vrb,
the.det programs.noun I.prn have.vrb been.vrb writing.vrb
然后我运行下面的管道命令:
egrep -o '(([A-Za-z]+\.vrb[ ]*)+[A-Za-z]+\.[^v][^r][^b])|(([A-Za-z]+\.vrb[ ]*)+)$' text.txt | egrep -o '([A-Za-z]+\.vrb[ ]*)+'
并得到以下输出(根据需要):
have.vrb been.vrb using.vrb
have.vrb been.vrb writing.vrb
第一个正则表达式获取动词链(仅space-separated)和后面的单词(non-verb)或者它获取动词链(仅space-separated)后跟eol.
第二个正则表达式过滤掉 non-verb 单词,如果它存在的话。
希望这对您有所帮助。