正则表达式用斜杠分隔斜杠提取文本

时间:2017-05-22 13:48:51

标签: regex

我试图使用正则表达式从xpath字符串中找到元素定义。 但是,某些元素定义包括斜杠分隔符本身。

xpath示例:

  

/初级[@classCode =' ABC'] /受试者[@typeCode =' 123 /一个'] [组织者/代码[@codeSystem =' 12.35.1.1 / b']] /组份[@typeCode =' RET'] /文本()

我期待结果:

  1. 初级[@classCode =' ABC']
  2. 受试者[@typeCode =' 123 /一个'] [组织者/代码[@codeSystem =' 12.35.1.1/b']]
  3. 组分[@typeCode =' RET']
  4. 文本()
  5. 尝试简单的事情,比如

      

    (小于?= /)(?*)(?= /)

    或类似的变化是不够的。

    是否存在正则表达式,无需进一步处理字符串即可将其分开?

2 个答案:

答案 0 :(得分:0)

虽然有更好的方法来提取xpath而不是使用正则表达式,具体取决于语言,但是如果你仍然必须使用正则表达式,那么你可以试试这个:

(?<=\/|^)(.*?(?:\[.*?\])*)(?=\/|$)
  • Lookbehind (?<=包括/或起始锚^
  • (.*?(?:\[.*?\])*)用于提取路径中的每个段
    • (?:\[.*?\])是一个非捕获组,用于匹配[]
    • 中的所有内容
    • 使用上述组的量词*,因为xpath段可以包含多个参数,例如示例中的subject[][]
  • Lookahead (?=\/|$)包括/或结束锚$

Regex101 Demo

// Output:
primary[@classCode='ABC']
subject[@typeCode='123/a'][organizer/code[@codeSystem='12.35.1.1/b']]
component[@typeCode='RET']
text()

答案 1 :(得分:0)

我不知道用例是什么,但我希望这会帮助你...

Regex demo

正则表达式: \/.*?[\]\)](?=\/|$)

  

1。 \/.*?[\]\)]这将匹配/,直到第一次出现])

     对于(?=\/|$)/(字符串结尾)

2。 $正向前看