【问题标题】:Regex how to capture string up to a character only when another character exists正则表达式如何仅在存在另一个字符时才将字符串捕获到一个字符
【发布时间】:2014-10-26 21:55:58
【问题描述】:

我想使用正则表达式来捕获字符串中的所有内容,直到冒号后跟空格 : 或逗号后跟空格 , 但如果冒号带有,则仅使用逗号作为条件可以在字符串中找到一个空格。也就是说,如果没有:,我什么都不想抓。如果字符串中有:,我想捕获直到它之前的所有内容,或者如果, 出现在: 之前,则直到,

我正在尝试

/(?:(?!: )[^])*/g 

/(?:(?!: )[^])*/g

一些示例文本:

这里我只想捕获DeBary

DeBary, OH: Suddenly on Thursday, June 16, 2011 at the age of 78.

这里我只想截取DeBary

DeBary: Suddenly on Thursday, June 16, 2011 at the age of 78.

这里我什么都不想拍:

Suddenly on Thursday, June 16, 2011 at the age of 78.

【问题讨论】:

    标签: regex string regex-lookarounds


    【解决方案1】:

    如上,虽然如果你想捕获匹配的子串,那么你需要一个捕获,而不是非捕获组,量词+within组:

    ^([^,:]+)(?=.*?:)

    【讨论】:

      【解决方案2】:

      这可能有效。

       # (?s)^(?=.*:[ ]).*?(?=[,:][ ])
      
       (?s)               # Dot-all modifier     
       ^                  # BOS
       (?= .* : [ ] )     # Lookahead for colon then space 
       .*?                # Consume minimal any chars up until
       (?= [,:] [ ] )     # Lookahead, Comma or colon, then whitespace
      

      或者,它可以在没有最终前瞻的情况下完成。

       # (?s)^(?=.*:[ ])[^,:]*
      
       (?s)               # Dot-all modifier     
       ^                  # BOS
       (?= .* : [ ] )     # Lookahead for colon then space 
       [^,:]*             # Consume non comma nor colon
      

      【讨论】:

        【解决方案3】:

        您可以使用前瞻来做到这一点:

        ^(?:[^,:])+(?=.*?:)
        

        Regex101 demo

        (?:[^,:])+ 捕获不是逗号或冒号的字符序列。

        (?=.*?:) 要求此匹配后跟任意字符,然后在某处加上冒号。

        【讨论】:

          【解决方案4】:

          这个模式应该能捕捉到你想要的:

          ^([^\n,:]+)(?=.*:)
          

          例子:

          http://regex101.com/r/vE0eP4/1

          【讨论】:

            【解决方案5】:

            您可以在没有前瞻的情况下执行此操作:

            ^(.*?)(?:, .*: |: )
            

            这假设实现给予最左边的交替优先权,大多数人都这样做。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2017-03-19
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2020-12-28
              相关资源
              最近更新 更多