如何编写此正则表达式以使这些术语不匹配?

时间:2014-10-17 23:02:25

标签: regex

我是正则表达式的新手。我已经写了这个表达式在File Renamer(JS)中使用,所以我可以按姓氏排列文件(它们以firstname开头,不能更改),它放置一个“!”在姓氏以其设置的字母开头的所有文件的前面(在这个例子中为“A”),然后可以将它们移动到单独的文件夹中。除了几个产生误报的术语外,它的作用是完美的,即:“和”“带”“Jr”“Sn”“II”“III”“IV”。我无法找到让它忽略这些术语的方法,是否可能?

(^[\w\.\s]+\bA[\w]+(,|\s-|\s&))
!$1

[1]:http://regex101.com/r/qU4yJ6/4 [见此链接] [1]

它必须与任何这些术语之前的第一个姓氏(最后一个单词)匹配“ - ”“&” “,”“和”“与”“Jr”“Sn”“II”“III”“IV”

--------------- MATCH -------------------

John Albert - Work00 - october.txt
Fred Allen - blah 01 - Whatever.txt
B. B. Archer - blah.txt
John M. Aines - Abcdef - {12345}.txt
A Arthur - abcdef.txt
Alex Abbott & Jane Doe - details.txt
D.C. Atkins, John Smith - Zxy123.txt
B. A. Arnold Jr, - (or Sn,) - def01.txt
Paul Adams III - (or II or IV).txt
Dave Ahern with Jo Short - [00].txt 

-----------不要匹配-------------

J Anthony Jones - yawn - zzzz.txt
Rand Sony et al - title.txt
AA Smith - lalala.txt
A.A. Bloggs - info00 - November.txt
A A Bilner - testing1234.txt
A. Lebert - Anything - October.txt
A Doe - etc - etc.txt
A & A Dell - Defghi.txt
A and A Bell - asdfghjkl.txt

2 个答案:

答案 0 :(得分:1)

尝试这种模式

^(?:(?![-&,]|and|with|Jr|Sn|II|III).)*\b(A\w+)\b(?=\s*(?:[-&,]|and|with|Jr|Sn|II|III))  

Demo

答案 1 :(得分:0)

您应该可以选择一个可选的交流发电机选择器(x | y | z)吗?在那个中间拿起你列出的那些词。

这只有足够的条款来做你的例子,但它是一个开始:

(^[\w\.\s]+\bA[\w]+(\s(Jr|III|with[^-]*))?(,|\s-\s.|\s&))

我在regex101样本上尝试了它并且它有效。

编辑:

当遇到第一个字母与交流发电机选择器匹配的处理姓氏时,你可以做一个负面的预测,以确保你不匹配错误的东西。除了在某些情况下交换单个匹配字母外,您还需要自定义每个字母的快递。

在您的示例数据中,对于J,您不希望匹配:

B. A. Arnold Jr, - abc - def01.txt
Dave Ahern with Jo Short - [00].txt.

但想要匹配:

J Anthony Jones - yawn - zzzz.txt

使用否定前瞻将让您处理Js。 J|Jr Example

(^[\w\.\s]+\bJ(?!r,)[\w]+(\s(Jr|III|with[^-]*))?(,|\s-\s.|\s&))

这可能更复杂,因此值得尝试用这样一行正则表达式来完成。