Regex 查找前接4位数字、后接非字母字符的1-3个单词或1-4个特定单词
我正在查看excel中的一长串数据。在这个长列表中,有一列混合了数字字符(数字)、字母字符和非字母数字字符所以有一个文本栏。 我试图在这一列的细胞中间找到1-2个单词。这些单词出现的时间总是在四位数和空格之后。(注意4位数字不会出现在我不感兴趣的单词之前) 我有一个工具,可以让我在excel中保存正则表达式列表,并编写了一个规则列表,该列表将查找4位数字和两个单词,前提是每个单词的长度在3-11个字符之间,然后将匹配项提取到一个新列 样本:-Regex 查找前接4位数字、后接非字母字符的1-3个单词或1-4个特定单词,regex,excel,between,words,Regex,Excel,Between,Words,我正在查看excel中的一长串数据。在这个长列表中,有一列混合了数字字符(数字)、字母字符和非字母数字字符所以有一个文本栏。 我试图在这一列的细胞中间找到1-2个单词。这些单词出现的时间总是在四位数和空格之后。(注意4位数字不会出现在我不感兴趣的单词之前) 我有一个工具,可以让我在excel中保存正则表达式列表,并编写了一个规则列表,该列表将查找4位数字和两个单词,前提是每个单词的长度在3-11个字符之间,然后将匹配项提取到一个新列 样本:- \b\d{4}\b\s*\b[A-Z]{11}\s*
\b\d{4}\b\s*\b[A-Z]{11}\s*\b[A-Z]{11}\s*
\b\d{4}\b\s*\b[A-Z]{10}\s*\b[A-Z]{11}\s*
\b\d{4}\b\s*\b[A-Z]{9}\s*\b[A-Z]{11}\s*
\b\d{4}\b\s*\b[A-Z]{8}\s*\b[A-Z]{11}\s*
and
\b\d{4}\b\s*\b[A-Z]{11}\s*\b[A-Z]{10}\s*
\b\d{4}\b\s*\b[A-Z]{11}\s*\b[A-Z]{9}\s*
\b\d{4}\b\s*\b[A-Z]{11}\s*\b[A-Z]{8}\s*
b\d{4}\b\s*\b[A-Z]{11}\s*\b[A-Z]{7}\s*
这已经创建了121种不同组合的列表,效果非常好。我确信有一种比我选择的更简单的方式来写这些东西,但那很好。使用复制和粘贴,当我弄明白如何编写规则后,我花了大约10分钟的时间,并花了10秒运行该批次 唯一的问题是——在我只想找到一个单词的情况下,有时在我不想包含的第一个单词后面会出现4个其他基于alpha的单词中的1个。 这些是:
INTE
MANU
PMNT
Payment
我想做的是在我上面的正则表达式中包含一个部分,排除上面示例中的任何第二个单词
有没有一种方法可以在我现有的规则列表中添加一些排除这些规则的内容,或者更好的方法是以一种完全不同的、更优雅的方式来做我想要做的事情,因为在极少数情况下,实际上有3个词我想要找到——为了弥补这些,我需要将我的列表增加到1331个组合
这方面的任何帮助都将是非常好的,因为我们每周都会获得这些精确的数据列表,而手动执行这一操作显然是不可能的。您可以使用以下等效于所有121个模式和排除要求的正则表达式:
\b\d{4}\b\s*\b[A-Z]{3,11}\s*\b(?!(INTE|MANU|PMNT|Payment)\b)[A-Z]{3,11}\s*
^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^
请参见谢谢你,Karthik这是一个很好的开始。但是,当有条目包含我想排除的单词作为第二个单词时,它根本找不到任何匹配项。我希望它提取第一个单词,忽略第二个。这可能吗?不要紧,如果我正确地构建规则,我可以忽略它们。再次感谢!!!很乐意帮助:)更新了您问题的答案。。查看演示:)