我试图在参考管理器中的分号分隔列表(作者姓名)中检查逗号是否多次(或根本不发生)。遗憾的是,我只能使用带有正则表达式的搜索功能,可能将多个正则表达式与AND,OR或NOT组合在一起。
我的字符串包含以分号分隔的条目。我的列表的最后一个条目最后没有分号,也可能根本没有分号(因为它只是一个条目)。正确的例子:
Einstein, A.; Hahn, O.; Meitner, I.
Einstein, A.
我想用正则表达式查找的是,如果有人确实以错误的方式输入了作者的名字(没有任何逗号或只是逗号而没有分号作为分隔符)。错误的例子:
Albert Einstein; Otto Hahn; Lise Meitner
(分号内没有逗号)Albert Einstein, Otto Hahn, Lise Meitner
(列表中没有分号)Einstein, A.; Otto Hahn; Meitner, L.
(第二个条目中没有逗号)Einstein, A.; Hahn, O., E.; Meitner, L.
(第二个条目中的两个逗号)我发现了一些类似的Problems。但是我无法得到我需要的匹配到一个正则表达式。
目前我正在组合不同的正则表达式
查找不带分号的多个逗号
^([^,]*,){2,}
AND
(?:;)+
在分号之前和之后查找多个分号(与OR结合)
(([^,;]*,){2,}[^;]*;)+(([^,;]*,){2,})?
我仍然没有得到所有结果。因此,我想用一个正则表达式检查来测试我的搜索:
答案 0 :(得分:0)
^ # Start of string
[^,;]*,[^,;]* # Match an entry containing exactly one comma
(?: # Start non-capturing group:
; # Match ";"
[^,;]*,[^,;]* # Match an entry containing exactly one comma
)* # Group can be matched any number of times
$ # End of string
如果满足所有要求,仅匹配字符串。
请注意,目前,单个逗号符合要求(,;,;,
是合法的);如果您不想要,请使用[^,;]+,[^,;]+
代替[^,;]*,[^,;]*
。
反过来也是可能的:
^ # Start of string
(?! # Assert that it's impossible to match...
[^,;]*,[^,;]* # Match an entry containing exactly one comma
(?: # Start non-capturing group:
; # Match ";"
[^,;]*,[^,;]* # Match an entry containing exactly one comma
)* # Group can be matched any number of times
$ # End of string
) # End of lookahead
.* # (optional: Match the entire string