Python Regex在字符串中用双引号查找字符串

时间:2012-03-01 16:12:29

标签: python regex

python中使用正则表达式执行类似

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

由于

4 个答案:

答案 0 :(得分:42)

以下是您需要做的所有事情:

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'

正如李叶雄所指出的那样:(我几乎引用)

.+?.+的“非贪婪”版本。它使正则表达式匹配最小数量的字符,而不是它可以使用的最多字符。贪婪的版本.+将提供字符串1" or "String 2" or "String 3;非贪婪版本.+?'字符串1,字符串2,字符串3'

此外(Johan再次发言),如果您想接受空字符串,请将.+更改为.*。星号表示零或更多 - 加上表示至少一个。

答案 1 :(得分:2)

只需尝试从多行字符串中获取双引号字符串:

stopNum

答案 2 :(得分:0)

投票率很高的答案并不能说明双引号字符串可能包含一个或多个双引号字符的可能性(当然可以正确转义)。为了处理这种情况,正则表达式需要使用正向超前断言来逐个累加字符,该字符表明当前字符不是双引号字符,且前面没有反斜杠(这要求断言后面的消极):

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

See Regex Demo

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\\"" ')

打印:

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

答案 3 :(得分:-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))

结果:

"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