我如何编写一个正则表达式,允许一个组中的零个或多个,以及另一个组中的零个或多个,但这两个组中至少有一个必须存在?
具体来说,我希望得到一个像引用一样的电子表格,因此它应该得到A1:B5(对于整个区域),A:A(对于整个列),或者5:5(对于整行)。< / p>
我第一次尝试
[A-Za-z]*[\d]*:[A-Za-z]*[\d]*
但这还不够,因为只需输入:或B6:也会满足该标准。
任何帮助都将不胜感激。
答案 0 :(得分:2)
您可以通过分组来实现这一目标......
/((how)|(now))+/
如果你想匹配一个范围而不是一个单元格引用,你可以只列举这样做的方法:
([A-Z]:[A-Z])|(\d+:\d+)|([A-Z]\d+:[A-Z]\d+)
答案 1 :(得分:1)
一种方法是明确的改变:
(?:[a-zA-Z]+|\d+|[a-zA-Z]+\d+):(?:[a-zA-Z]+|\d+|[a-zA-Z]+\d+)
但是,如果你的引擎支持lookbehind,你可以使用它:
(?>[a-zA-Z]*\d*(?<=.)):(?>[a-zA-Z]*\d*)(?<=.))
这表示“零个或多个字母,后跟零个或多个数字,必须以至少一个字符(。)结尾。这保证它不会为空。原子分组(?>...)
表示lookbehind (?<=.)
无法与此前的任何内容相匹配。