2017-11-03 121 views
0

的第一部分,我有这样的正则表达式正则表达式得到一个字符串

(?<=\d\.\s).+(?=\s-\s) 

它的伟大工程时,我有一个像

3. product - sub product 

字符串的正则表达式给我的产品(第一部分)。如果存在子产品,则通过围绕空格的短划线(-)从产品分隔。

但是,有一些产品没有子产品。例如:

6. ComprehensiveBolt 

正则表达式应该给我comprehensiveBolt但它不会返回任何东西。

我需要对我的正则表达式做什么更新,以便我可以获得产品,而不管子产品的存在或其他情况如何?

+0

'?'意味着可选。你可以使用它。 –

+0

你可以把这里的完整语法。我一定做错了什么。 –

+0

它不这样工作。您正在使用'(?= \ s- \ s)'来确定产品的合格性。如果你使它成为_optional_'(?= \ s- \ s)?'它永远不必与断言匹配,而且它很可能不会。更好的方法是使用边界或空白指示符。你可以尝试'(?<= \ d \。\ s)。+?(?= \ s- \ s)?'但是你必须使'。+'不贪心。 – sln

回答

2

这是一种方法。
请注意,仅当您的产品可能是短语时才需要。

(?<=\d\.\s)(?:(?!\s-\s|\d\.\s).)+

https://regex101.com/r/uC2yDs/1

部分解释

(?<= \d \. \s)    # This must be behind 
(?:       # ----------- 
     (?!       # Neg assertion 
      \s - \s      # Not this ahead 
     | \d \. \s      # Nor this ahead 
    ) 
     .        # Ok, grab this character 
)+       # 1 to many times 
+1

完美。第一次尝试工作。谢谢sln –

相关问题