Regex可选分组括号之间的文本,但不包括结果中的括号
对于在某个时刻解释数据定义文本的应用程序,我想使用regex。正则表达式应该为每行将数据定义分成4个组 问题是,括号之间有一个组,但它也是可选的,应该从结果中排除括号。我一直在尝试一些东西,但不能完全让它发挥作用 这就是我到目前为止得到的Regex可选分组括号之间的文本,但不包括结果中的括号,regex,Regex,对于在某个时刻解释数据定义文本的应用程序,我想使用regex。正则表达式应该为每行将数据定义分成4个组 问题是,括号之间有一个组,但它也是可选的,应该从结果中排除括号。我一直在尝试一些东西,但不能完全让它发挥作用 这就是我到目前为止得到的 \[(.*?)\]\s.*(varchar|datetime|int|numeric)(\(.*?\))?(.*) # explanation \[(.*?)\] # field name between brac
\[(.*?)\]\s.*(varchar|datetime|int|numeric)(\(.*?\))?(.*)
# explanation
\[(.*?)\] # field name between brackets
\s.* # one or more spaces
(varchar|datetime|int|numeric) # data type keywords
(\(.*?\))? # length or mask, ?=optional
(.*) # anything after that are the hints
例如,输入它是这样的
[LastName] varchar(50) NULL
[BirthDate] datetime(dd-mm-yyyy) NOT NULL
[HBa] numeric NOT NULL
[email] varchar(50) NOT NULL
[Followup] int NULL
每行都有一个匹配项,例如生日的结果如下:
# current # desired
group 1: BirthDate group 1: BirthDate
group 2: datetime group 2: datetime
group 3: (dd-mm-yyyy) group 3: dd-mm-yyyy
group 4: NOT NULL group 4: NOT NULL
理想情况下,第3组应排除括号,第4组也不应包括开头的空格。你知道怎么做吗?请参见此处的示例:
我们应该做到这一点。我所做的唯一调整是
添加非捕获组,并反转(50)
匹配的文字括号和捕获组
添加\s*
以在(50)
组和行的其余部分(非NULL
组)之间使用空格
只需将第三个捕获组替换为非捕获组,并在括号内使用捕获组。例如,(?:\(.*?)?
而不是(\(.*)?
。谢谢,我只想提到我有一个类似的正则表达式,用于CountPrint int NULL
,起初因为列名中的int
而不起作用。正则表达式没有显式检查空格,所以我将\s.*
替换为\s+
,然后它就可以工作了。
\[(.*?)\]\s.*(varchar|datetime|int|numeric)(?:\((.*?)\))?\s*(.*)