首页 文章

用于检测未用双引号括起来的字符串的正则表达式

提问于
浏览
10

我有一个像这样的字符串

"quick" "brown" fox jumps "over" "the" lazy dog

我需要一个正则表达式来检测没有用双引号括起来的单词 . 经过一些随机尝试后,我发现了 ("([^"]+)") . 这会检测用双引号括起来的字符串 . 但我希望相反 . 在试图扭转上面提到的正则表达式后,我真的无法想出它 . 我在正则表达式上相当弱 . 请帮我

3 回答

  • 0

    使用lookahead / lookbehind断言:

    (?<![\S"])([^"\s]+)(?![\S"])
    

    例:

    >>> import re
    >>> a='"quick" "brown" fox jumps "over" "the" lazy dog'
    >>> print re.findall('(?<![\S"])([^"\s]+)(?![\S"])',a)
    ['fox', 'jumps', 'lazy', 'dog']
    

    这里的主要内容是前瞻/后瞻断言 . 你可以说:我想在表达式之前使用这个符号,但我不希望它成为匹配本身的一部分 . 好 . 为此您使用断言:

    (?<![\S"])abc
    

    这是一个负面的背后隐藏 . 这意味着你想要 abc 但在它之前没有 [\S"] ,这意味着必须没有非空格字符(单词的开头)或之前的 " .

    这是相同的,但在另一个方向:

    abc(?![\S"])
    

    这是一个负面的预测 . 这意味着你想要 abc 但没有 [\S"] 之后 .

    一般来说,这种类型有四种不同的断言:

    (?=pattern)
        is a positive look-ahead assertion
    (?!pattern)
        is a negative look-ahead assertion
    (?<=pattern)
        is a positive look-behind assertion
    (?<!pattern)
        is a negative look-behind assertion
    
  • 27

    从字符串中删除第一个引号

  • 0

    使用这个正则表达式:

    \s+(?<myword>([^\"\s]+)*)\s+
    

    这应该是有效的;并获得名为myword的组 . 否则你需要修剪你的结果字符串 .

相关问题