我正在尝试标记以下文本:
F.B.I. is an acronym. FBI is an acronym, c.i.a. could also be one. $1,000,000.00 is a currency value as well as 1.000.000,00£ for example. Here is a measure cm24.54 and 34.3cm...
像这样:
F.B.I. | is | an | acronym | . | FBI | is | an | acronym | , | c.i.a. | could | also | be | one | . | $ | 1,000,000.00 | is | a | currency | value | as | well | as | 1.000.000,00 | £ | for | example | . | Here | is | a | measure | cm | 24,54 | and | 34.3 | cm | ...
我已经开始编写正则表达式来执行此操作,但是我不确定如何将首字母缩写词和数字保持在一起。
我的正则表达式如下:str.split(/\s|(?=[^A-Za-z0-9#@])/)
,它拆分并丢弃空格,并且拆分非字母数字字符(不包括#
和@
),而无需使用正向前移将其删除
如何修改我的正则表达式以如上所述分割文本?
答案 0 :(得分:2)
挑选代币比挑选漏洞要容易得多。只需下拉列表,修复怪异的东西,移动子表达式,直到它们执行您想要的操作为止。请记住,在array_length
中,A|B
具有优先权。例如,这似乎适用于上面的代码段:
A
但是,请注意,这是对异常进行分类的一种练习。肯定会有某些事情您会错过,或者最终会出错,甚至在某些情况下您需要基于上下文的矛盾规则。
编辑:这就是我在评论中所说的,但是如果您发现它很棒,那么
let re = /\$|\£|cm|\.{3,}|[0-9,.]+|(?:\w\.){2,}|[\w.-]+@[\w.-]+|[-\w]+/g;
let text = "F.B.I. is an acronym. FBI is an acronym, c.i.a. could also be one. $1,000,000.00 is a currency value as well as 1.000.000,00£ for example. Here is an email address email@address.com and a measure cm24.54 and 34.3cm...";
console.log(text.match(re));
答案 1 :(得分:0)
我认为您不能仅使用正则表达式来完成此操作,例如以.
为例。它可能是句子的结尾,小数点,几种欧洲语言中使用的千位分隔符,或者是ASCII省略号...
而非…
的一部分。 CLDR项目有一些将文本分成句子的规则。