如何将两个单词统计为同一行中的1

时间:2014-07-22 15:20:29

标签: javascript regex

在我得到的文本文件中,每个句子都用特定类型表示,例如:contrast。

对比句子可以用标签“CONTRAST”或“CONTR”或“WEAKCONTR”表示。例如:

  

IMPSENT_CONTRAST_VIS(以这种方式学习网络可以帮助你   识别个人从中学习的人,其中   conflicts_MD:理解_MD中的+:+可能是起源,哪个是   语境因素影响学习。)

所以我用下面的表达式计算这些:/(\_(WEAK))|(\_CONTRAST)|(\_CONTR(\_|\())/g,它完全正常。

现在问题是一些句子用一个以上的对比标签来表达,例如CONTR& WEAKCONTR在一起。例如:

  

IMPSENT_CONTRAST_EMPH_WEAKCONTR_VIS(Studying_MD:+这样的网络   可以帮助识别_MD:+个人学习的人   ,insight_MD:+ in Understanding_MD:+可能来自,和   哪些背景因素会影响学习。)

此时我必须将这些数量计为1而不是2.您是否知道这对RegExp有多大可能?

4 个答案:

答案 0 :(得分:1)

您可以使用前瞻来断言它,然后计算匹配项:

(?=\w*_(?:WEAK|CONTRAST|CONTR[_)]))\b\w+\b

在这里演示:http://regex101.com/r/xP2yI7/3
注意匹配计数。

这将匹配整个IMPSENT_CONTRAST_EMPH_WEAKCONTR_VIS表达式,但前提是它与前瞻中的部分匹配,后者会过滤您正在关注的关键字。即使你在同一行上有多个这样的句子,这也会匹配。

另外,我已经简化了你的正则表达式,保留了相同的含义。请注意,您不必转义_

答案 1 :(得分:1)

你真的只关心标签是否显示在行中,所以只要抓住整行,只要它有标签,就像这样:

/^([A-Z_]+(WEAK|CONTRAST|CONTR)+[A-Z_]*)/gm
  

^ 一行开始,查找带有 AZ _ 的字块,然后是标记,可选地后跟更多字词/下划线

DEMO

答案 2 :(得分:0)

您可以尝试添加\w+

/(\_(WEAK\w+))|(\_CONTRAST\w+)|(\_CONTR(\_\w+|\())/g

答案 3 :(得分:0)

这样的东西?

(^(\_(WEAK))|(\_CONTRAST)|(\_CONTR(\_|\()))