从原始文本中提取名称

Extract the names from raw text

我正在处理一个问题,我有一个原始文本,其中有一个像 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

这应该适用于以下正则表达式:

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

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

我们有两个捕获组,除以模式“v.”,它必须在要匹配的组之间。

在第一个捕获组中,我们以:[\w&;.] 这会捕获一个字符,它是 \w (= a-z, A-Z, 0-9, _)) 或 &;.

然后我们捕获一个或多个 (+) 个字符:[\w&;。 ]+ 这是同一组,但有额外的“”

我们终于抓到了:[\w&;.] 这会捕获一个字符,它是 \w (= a-z, A-Z, 0-9, _)) 或 &;.

通过在开头和结尾使用不带“”的字符组,我们可以确定找到的名称没有前导或尾随空格。

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

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

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

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

时结束

一般来说,一个简单的解决方案是将 " 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 as

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

我在 notepad++ 中尝试了您的示例文本,假设在第二个名称后有一个逗号,我能够通过以下正则表达式获得结果

(.+?)vs(.+),