我正试图找出这个正则表达式。我有一系列的话:
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,}))?)(。*)
答案 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,}\))?|(?:,))(.*)