正则表达式捕获组并使用 OR 语句

标签 regex

我正在尝试创建一个正则表达式,它具有多个由 | (OR) 分隔的条件。我想使用捕获组,但无法充分发挥作用。

3 个示例字符串:

--- {source-charset: '', encoding-error-limit: '', class: stat-direct, directory: \\\myserver\C\FOLDER\SUB_FOLDER}  
--- {odbc-connect-string-extras: '', server: hello.sample.com, dbname: X_DB, port: '80', class: hello, username: USERX}  
--- {cleaning: 'no', filename: //myserver/D/FOLDER/SUB_FOLDER/File name.xlsx, dataRefreshTime: '', interpretationMode: '0'}

对于每个示例字符串,我希望正则表达式返回:

\\\myserver\C\FOLDER\SUB_FOLDER  
X_DB  
//myserver/D/FOLDER/SUB_FOLDER/File name.xlsx

基本上是 directory:dbname:filename: 之后并以 结尾的值其中有两个,

我已经设法使用 OR 语句来获取三个条件。 正则表达式提取

'directory: [^}]+|dbname: [^,]+|filename: [^,]+'

返回:

directory: \\\myserver\C\FOLDER\SUB_FOLDER}  
dbname: X__DB,  
filename: //myserver/D/FOLDER/SUB_FOLDER/File name.xlsx,

如果我引入捕获组,我只会得到其中一部分的正确返回: '目录:([^}]+)|数据库名:([^,]+)|文件名:([^,]+)'

返回:

\\\myserver\C\FOLDER\SUB_FOLDER  
null  
null  

我已经设法让它与从

获取结果的嵌套正则表达式一起工作
'directory: [^}]+|dbname: [^,]+|filename: [^,]+'   

并使用:

': ([^,}]+)'

这给了我想要的结果,但我想将其作为一个正则表达式来执行。 任何帮助将不胜感激。

/阿龙

最佳答案

你可以使用 negated character class不匹配 {, } 或逗号,匹配非捕获组中的任何选项并使用单个捕获组捕获值:

{[^{]+(?:filename|directory|dbname): ([^,}]+)[^}]*}

解释

  • { 匹配 {
  • [^{]+ 匹配 1+ 次 not { using a negative character class
  • (?:filename|directory|dbname): 匹配任何列出的选项,后跟 : 和一个空格
  • ( 捕获 group1
    • [^,}]+ 匹配 1+ 次而不是 ,
  • ) 关闭第 1 组
  • [^}]*}匹配0+次不是,然后匹配}

Regex demo

关于正则表达式捕获组并使用 OR 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57522578/

相关文章:

python - 如何在Python中的数字的不同位置添加点分隔符?

python - Python 3 中字节串的正则表达式

基于 Java 的语法检查/基于规则的工具集

javascript - javascript中的 token 替换

regex - 如何替换电子邮件中两个关键词之间的句子?

java - 查询字符串的正则表达式模式

c# - 查询字符串值的 .NET 正则表达式

python - 使用 Python 获取最后一列中的字符串

Python 正则表达式问题 : stripping multi-line comments but maintaining a line break

java - 如何检查字符串是否为正则表达式