Python正则表达式查找字符串中的双引号的字符串

A代码在python使用正则表达式,可以这样执行的东西

Input: Regex should return "String 1" or "String 2" or "String3" 
Output: String 1,String2,String3

谢谢

There could be quotes inside quotes, what would you do with that?user1227804
No,并且不会有任何的报价。只是简单的字符串A-Z,0-9空格,下划线,大多是字母数字里面没有任何them3单或双引号nomi
Is this an assignment to us? 什么你试过so多远?Rik波吉
@碧Roggi,其实我试过以下R ' “*”'。我希望我会在你的好书从现在病房nomi

回答 5

  1. 赞同 66

    Here就是所有你需要做的:

    def doit(text):      
      import re
      matches=re.findall(r'\"(.+?)\"',text)
      # matches is now ['String 1', 'String 2', 'String3']
      return ",".join(matches)
    
    doit('Regex should return "String 1" or "String 2" or "String3" ')
    # result:
    'String 1,String 2,String3'
    

    As指出的立昂业:(我几乎行情)

    .+?is“非贪婪”版.+.这让正则表达式匹配它可以代替它可以最字符的字符的最小数目。贪婪的版本,.+, will give string 1" or "String 2" or "String 3; the non-greedy version .+?'String 1,字符串2,STRING3'

    In除了(约翰再次说),如果你想接受空字符串,变化.+to.*.星表示零或更多 - 加至少一个手段。

    Johan伦德伯格
    Thanks约翰,我是新来的蟒蛇。我刚刚从你的榜样学到。加入,希望我可以给你一些加分nomi
    To阐述,.+?is“非贪婪”版.+.这让正则表达式匹配它可以代替它可以最字符的字符的最小数目。贪婪的版本,.+, will give string 1" or "String 2" or "String 3;非贪婪版本.+?givesString 1String 2, String 3.Li-昂业
    Is有必要转义双引号?既然你无论如何使用原始字符串。岂不r'"(.+?)"'suffice?这似乎是我的系统上工作。Sam德•梅耶尔
  2. 赞同 5

    Just尝试获取来自多行字符串双引号字符串:

    import re
    
    str=""" 
    "my name is daniel"  "mobile 8531111453733"[[[[[[--"i like pandas"
    "location chennai"! -asfas"aadhaar du2mmy8969769##69869" 
    @4343453 "pincode 642002""@mango,@apple,@berry" 
    """
    print(re.findall(r'["](.*?)["]',str))
    

    Daniel Muthupandi
  3. 赞同 2

    The高度上投答案并不占了双引号的字符串可能包含一个或多个双引号字符的可能性(正确转义,当然)。为了处理这种情况,正则表达式需要积累字符一个接一个用positive前向断言stating当前字符不是不是由反斜杠(这需要一个双引号字符negative向后断言):

    "(?:(?:(?!(?<!\\)").)*)"
    

    See正则表达式演示

    import re
    import ast
    
    
    def doit(text):
        matches=re.findall(r'"(?:(?:(?!(?<!\\)").)*)"',text)
        for match in matches:
            print(match, '=>', ast.literal_eval(match))
    
    
    doit('Regex should return "String 1" or "String 2" or "String3" and "\\"double quoted string\\"" ')
    

    Prints:

    "String 1" => String 1
    "String 2" => String 2
    "String3" => String3
    "\"double quoted string\"" => "double quoted string"
    

    Booboo
  4. 赞同 0

    Fromhttps://stackoverflow.com/a/69891301/1531728

    My的解决方案是:

    import re
    my_strings = ['SetVariables "a" "b" "c" ', 'd2efw   f "first" +&%#$%"second",vwrfhir, d2e   u"third" dwedew', '"uno"?>P>MNUIHUH~!@#$%^&*()_+=0trewq"due"        "tre"fef    fre f', '       "uno""dos"      "tres"', '"unu""doua""trei"', '      "um"                    "dois"           "tres"                  ']
    my_substrings = []
    for current_test_string in my_strings:
        for values in re.findall(r'\"(.+?)\"', current_test_string):
            my_substrings.append(values)
            #print("values are:",values,"=")
        print(" my_substrings are:",my_substrings,"=")
        my_substrings = []
    

    Alternate正则表达式来使用是:

    • re.findall( ' “(。+?)”',current_test_string)[Avinash2021] [user17405772021]
    • re.findall( ' “(。*?)”',current_test_string)[Shelvington2020]
    • re.findall(R ' “(。*?)”',current_test_string)[Lundberg2012] [Avinash2021]
    • re.findall(R ' “(。+?)”',current_test_string)[Lundberg2012] [Avinash2021]
    • re.findall(R ' “[”]',current_test_string)[Muthupandi2019]
    • re.findall(R ' “([^”] *)'“,current_test_string)[Pieters2014]
    • re.findall(R ' “(?:(?:((<\)?!?!”))*)“。',current_test_string)#导致双引号留在弦,但可以通过被移除其它手段。[Booboo2020]
    • re.findall(R ' “(。*?)(?<!\)”',current_test_string)[Hassan2014]
    • re.findall(“‘[^’] *“”,current_test_string)#导致双引号留在字符串,但可以通过其它手段来移除。[Martelli2013]
    • re.findall( ' “([^”] *)'“,current_test_string)[jspcal2014]
    • re.findall( “ '(。*?)'”,current_test_string)[akhilmd2016]

    Thecurrent_test_string.split("\"")approach工作,如果字符串有其子被嵌入引号内的模式。This是因为它使用双引号在这个例子中作为分隔符来标记串,和接受未嵌入的双引号从串有效子提取内的子串。

    References:

    giovanni
  5. 赞同 -1

    import re
    r=r"'(\\'|[^'])*(?!<\\)'|\"(\\\"|[^\"])*(?!<\\)\""
    
    texts=[r'"aerrrt"',
    r'"a\"e'+"'"+'rrt"',
    r'"a""""arrtt"""""',
    r'"aerrrt',
    r'"a\"errt'+"'",
    r"'aerrrt'",
    r"'a\'e"+'"'+"rrt'",
    r"'a''''arrtt'''''",
    r"'aerrrt",
    r"'a\'errt"+'"',
          "''",'""',""]
    
    for text in texts:
         print (text,"-->",re.fullmatch(r,text))
    

    Results:

    "aerrrt" --> <_sre.SRE_Match object; span=(0, 8), match='"aerrrt"'>
    "a\"e'rrt" --> <_sre.SRE_Match object; span=(0, 10), match='"a\\"e\'rrt"'>
    "a""""arrtt""""" --> None
    "aerrrt --> None
    "a\"errt' --> None
    'aerrrt' --> <_sre.SRE_Match object; span=(0, 8), match="'aerrrt'">
    'a\'e"rrt' --> <_sre.SRE_Match object; span=(0, 10), match='\'a\\\'e"rrt\''>
    'a''''arrtt''''' --> None
    'aerrrt --> None
    'a\'errt" --> None
    '' --> <_sre.SRE_Match object; span=(0, 2), match="''">
    "" --> <_sre.SRE_Match object; span=(0, 2), match='""'>
     --> None
    

    Patricec
    扫描器你解释了答案如何在一些细节中工作。根据问题,我无法找到它。Abhishek Gurjar