在我得到的文本文件中,每个句子都用特定的类型表示,例如:对比度
对比句子可以用标签“CONTRAST”或“CONTR”或“WEAKCONTR”表示。例如:
IMPSENT_CONTRAST_维斯(以这种方式研究网络有助于
确定个人学习的人,在哪里
在理解_MD:+中的_MD:+冲突可能产生,并且
情境因素影响学习。)
所以我用下面的表达式来计算这些:/(\_(WEAK))|(\_CONTRAST)|(\_CONTR(\_|\())/g
,它工作得很好。
现在的问题是一些句子用一个以上的对比标签来表达,比如CONTR和WEAKCONTR。例如:
IMPSENT_CONTRAST_EMPH_WEAKCONTR_维斯(以这种方式研究_MD:+网络可以帮助识别_MD:+个人学习的人,理解_MD:+中的冲突可能源于何处,以及哪些情境因素影响学习。
在这一点上,我必须把它们算作1而不是2。你知道这在RegExp中有多可能吗?
4条答案
按热度按时间o8x7eapl1#
你可以使用lookaheads来Assert它,然后计算匹配次数:
示例:http://regex101.com/r/xP2yI7/3
注意匹配计数。
这将匹配整个
IMPSENT_CONTRAST_EMPH_WEAKCONTR_VIS
表达式,但只有当它匹配lookahead中的部分时,它才会过滤您正在寻找的关键字。即使在同一行上有多个这样的句子,这也会匹配。此外,我还简化了正则表达式,保留了相同的含义。请注意,您不必转义
_
。0pizxfdo2#
你真的只关心标签是否显示在行中,所以只要抓住整行,只要它有一个标签,就像这样:
从**^行的开头开始,查找带有A-Z或_**后跟标签的单词块,可以选择后跟更多单词/下划线。
DEMO
qeeaahzv3#
你可以尝试添加
\w+
:kdfy810k4#
像这样的吗