我正试图从文本中提取公司的名称。
我发现公司的名字以大写字母开头,其中一些包含'和'或'de'或'& '或'内部'。'
所以我写了捕捉它们的正则表达式
:(?:[A-Z]+[\w'-]*\s?(?:&\s|and\s|de\s|of\s)?)+%?
例如,从句子
“该公司最大的客户,沃尔玛商店,公司及其 附属公司,占净销售额的约25% 在2009财政年度期间,在2008和2007财政年度期间为24%。“
此正则表达式匹配
“The”,“Wal-Mart Stores”,“Inc”
但是,我遇到了两个问题。
问题1:
我发现该公司的细分市场,产品,部门,类别,销售名称也是匹配的,因为它也是从首都开始的。但是,我不想将这些名称与公司名称一起提取。
问题2:
我不想获得以S(s)ale / s / in或in sold开头的名字
例如,
;;;;; 2005年度,公司派生 其综合收入约为21%(4,782,852美元) 与Kmart Corporation直接交易的持续经营。 计算机产品的销售对我们很重要。但是,计算机的零件和 展示分部销售一直在下降。
根据我上面写的正则表达式,它提取 ['In','公司','凯马特公司', '计算机销售',“计算机零件和显示部门” ]
因为,我不想获得“计算机销售”和“计算机零件和显示部门”
我尝试使用负面向前看/向后看
波纹管是我到目前为止所尝试的:
我添加了负面向前看( (?![Ss] egments?| [Pp] roducts?| program?| [Dd] ivisions?| [Cc] ategor(?:y | IES)|?[SS]的啤酒) )
(:[AZ] + [\ W' - ] \ S(:????&安培; \ S |和\ S | DE \ S | \ S的))+的 的([SS] egments | [PP] RODUCTS |程序| [日] ivisions | [CC] ategor(?!?????Y | IES)| [SS]的啤酒? )*
但是, 仍匹配“计算机的零件和显示段”......
我在正则表达式的开头添加了(?。
然而,似乎负面看后面的表达式不能包含分组或| ......
惠特这么大的挫败感,我为每个案例写了几个正则表达式,并用set操作来处理这个问题。然而,我想知道是否有任何单一的正则表达式可以完全达到我所期望的一次性?
感谢阅读!