从原始文本

时间:2016-03-21 05:59:46

标签: regex nlp text-extraction

我正在研究一个问题,我有一个原始文本,其中有Some Name (vs|v.) Some other name这样的模式,我想提取这些名称,即

我试过

(first group) (vs|v.) (second group)

使用正则表达式来捕获vs两侧的单词,但只捕获一个单词,而不是完整的名称,我不知道在vs的两侧提取名称时停止的位置名称与其他文本几乎相同

任何帮助将不胜感激

文字就像是

person concerned applies, the Assessing Officer has to issue an appropriate certificate [Cf. 
<em>L. Hirday Narain vs Income Tax Officer, 
</em>(1970) 78 ITR 26(SC) ]. 

所以这里的正则表达式应该抓住 L. Hirday NarainIncome Tax Officer

3 个答案:

答案 0 :(得分:1)

这适用于以下Regex:

/([\w&;.][\w&;. ]+[\w&;.]) v. ([\w&;. ]+[\w&;.])[ ,<\n.]/gm

在此处查看实时示例: https://regex101.com/r/zP8jM0/4

我们有两个捕获组,除以模式&#34; v。&#34;必须在各组之间进行匹配。

在第一个捕获组中,我们从:[\ w&amp ;;。]开始 这会捕获一个char,它是\ w(= a-z,A-Z,0-9,_))或&amp ;;。

然后我们捕获了一个或多个(+)字符:[\ w&amp;; ] + 这是同一组,但附加&#34; &#34;

最后我们捕获:[\ w&amp;;。] 这会捕获一个char,它是\ w(= a-z,A-Z,0-9,_))或&amp ;;。

使用没有&#34;的char组&#34;在开始和结束时,我们可以肯定,找到的名字不具有前导或尾随空格。

第二个捕获组(名称2)的工作方式略有不同。

我们从:[\ w&amp ;;开始。 ] 这捕获了多个字符,它们是\ w(= a-z,A-Z,0-9,_)或&amp; ;

我们结束小组以确保它没有任何尾随空格:[\ w&amp;;。] 这会捕获一个char,它是\ w(= a-z,A-Z,0-9,_))或&amp ;;。

最后,我们有某种停止模式:[,&lt; \ n。] 这可确保名称在任何标记(&lt;)之前或新行开始(\ n)或句子结束(,。)时结束。

答案 1 :(得分:1)

一般来说,一个简单的解决方案是将" vs "上的文字拆分为delimiter

首先,在执行类似

之类的标记之间提取文本
var bigText = "erson concerned applies, the Assessing Officer has to issue an appropriate certificate [Cf.<em>L. Hirday Narain vs Income Tax Officer,\n</em>(1970) 78 ITR 26(SC) ]. ";
var a = "";
var names = [];
bigText.replace(
            /<em>(.*?),\n<\/em>/g,
            function () {
                a = arguments[1];
                names = a.split(/ vs /);
                console.log(names);
            }
);

会将结果数组names作为

["L. Hirday Narain", "Income Tax Officer"]

答案 2 :(得分:0)

我在notepad ++中尝试了你的示例文本,并且能够获得跟随Regex的结果,假设第二个名字后面有一个逗号

(.+?)vs(.+),