regex - 括号之间的正则表达式可选组文本,但在结果中排除括号
问题描述
对于在某些时候解释数据定义文本的应用程序,我想使用正则表达式。正则表达式应将每行的数据定义分成 4 组。
问题是,括号之间有一个组,但它也是可选的,它应该从结果中排除括号。我一直在尝试一些事情,但不能完全让它发挥作用。
这是我到目前为止所拥有的
\[(.*?)\]\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
每行都有一个匹配项,例如结果BirthDate
如下:
# 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 组也不应在开头包含空格。知道怎么做吗?请参见此处的示例: https ://regex101.com/r/x60Ekg/1
解决方案
\[(.*?)\]\s.*(varchar|datetime|int|numeric)(?:\((.*?)\))?\s*(.*)
应该做的伎俩。我所做的唯一调整是
- 添加非捕获组并反转文字括号和捕获组以进行
(50)
匹配。 - 在组和行的其余部分(组)之间添加
\s*
吃空间。(50)
NOT NULL
推荐阅读
- amazon-iam - 调用 PutRolePolicy 操作时发生错误(ValidationError):policyDocument 的指定值无效
- ios - 为什么我不能更改 Timer.scheduledTimer 函数中变量的值?
- javascript - 循环删除和添加对象属性
- image - Android Studio - 将位图保存到图库不正确
- r - 如何通过分组合并行并仅在R中保留最高值
- cordova - 从 Cordova android 模拟器打印
- powershell - 需要使用 Powershell 向 Teams 发送 .csv
- ios - Swift 中的递归函数在使用大量输入调用时崩溃
- python - pandas 中的列表列(如果存在于另一个列表中)
- javascript - 谷歌脚本:设置自定义比例,导出为 PDF 时