正则表达式 - 较大捕获中的非捕获条件

时间:2014-02-04 02:38:22

标签: regex

我正试图找出这个正则表达式。我有一系列的话:

cola String(18,2), nullable=False, default='N'
colb Decimal(18,2), nullable=False, default=0
colc String(18), nullable=False, default='TAA'
cold Integer, nullable=False, default=1

现在,我正试图将其分解为:

cola || String(18,2) || , nullable=False, default='N'
colb || Decimal(18,2) || , nullable=False, default=0
colc || String(18) || , nullable=False, default='TAA'
cold || Integer || , nullable=False, default=1

我已经编写了一个正则表达式:

([a-zA-Z0-9_]{1,}) ([a-zA-Z]{1,}(?:\([0-9,]{1,7}[0-9]{0,}\))|(?:,))(.*)

返回:

cola || String(18,2) || , nullable=False, default='N'
colb || Decimal(18,2) || , nullable=False, default=0
colc || String(18) || , nullable=False, default='TAA'
cold Integer, nullable=False, default=1

注意,最后一行未被替换。这是替换要求:

\1 || \2 || \3

所以,我的想法是,如果我在第二次捕获中放入一个条件非捕获检查,它会找到第一个部分(列类型),然后在它之后检查(xxx,yyy)值,如果它没有不存在,返回\ 2作为列类型仍然有效。

显然,我已经对这个函数做了大量的假设,但我似乎无法在网上找到对我有意义的正确解释,以一种我可以修复这个正则表达式的方式。

非常感谢任何帮助

**固定**我忘记将其设为“可选”:/

([a-zA-Z0-9 _] {1,})([a-zA-Z] {1,}(?:( [0-9,] {1,7} [0-9] {0,}))?)(。*)

1 个答案:

答案 0 :(得分:3)

你真是太近了!

更改

([a-zA-Z0-9_]{1,}) ([a-zA-Z]{1,}(?:\([0-9,]{1,7}[0-9]{0,}\))|(?:,))(.*)

([a-zA-Z0-9_]{1,}) ([a-zA-Z]{1,}(?:\([0-9,]{1,7}[0-9]{0,}\))?|(?:,))(.*)