1

我将如何编写一个正则表达式,允许一个组中的零个或多个,以及另一个组的零个或多个,但至少两个组中的一个必须存在?

具体来说,我想得到一个类似参考的电子表格,所以它应该得到 A1:B5(对于整个区域)、A:A(对于一整列)或 5:5(对于一整行)。

我第一次尝试

[A-Za-z]*[\d]*:[A-Za-z]*[\d]*

但这还不够,因为只需键入 : 或 B6: 也可以满足该标准。

任何帮助,将不胜感激。

4

2 回答 2

2

你可以通过分组来做到这一点......

/((how)|(now))+/

如果你想匹配一个范围而不是一个单元格引用,你可以列举方法来做到这一点:

([A-Z]:[A-Z])|(\d+:\d+)|([A-Z]\d+:[A-Z]\d+)
于 2012-04-23T00:42:38.647 回答
1

一种方法是显式交替:

(?:[a-zA-Z]+|\d+|[a-zA-Z]+\d+):(?:[a-zA-Z]+|\d+|[a-zA-Z]+\d+)

但是,如果您的引擎支持后视,您可以使用它:

(?>[a-zA-Z]*\d*(?<=.)):(?>[a-zA-Z]*\d*)(?<=.))

这表示“零个或多个字母,后跟零个或多个数字,它必须以至少一个字符 (.) 结尾。这保证它不会为空。原子分组(?>...)意味着后向(?<=.)不能匹配之前出现的任何内容那一点。

于 2012-04-23T00:48:35.133 回答