连接拆分引号

时间:2017-01-18 23:41:50

标签: python regex

我有一个大文件(f),有很多对话。我需要一个连接分裂引号的正则表达式(即"你好," Josh热情地说,"我有一个问题!"),但不删除中间部分。所以,对于这个例子,输出将是,"你好,我有一个问题!"然后" Josh热情地说#34;将保留在某个地方。我认为我走在正确的轨道上,但是没有找到适合这些规格的东西。这是我已经尝试过的代码:

for line in f:
  re.findall(r'"(.*?)"', line)
  output_file.write(line)

split = re.compile(r'''
                (,\")                
                (.*?)                
                (,)                  
                ( )                  
                (")''', re.VERBOSE)  

for line in f:
  m = split_quote.match(split)
  if m:
    output_file.write(m.group(1) + m.group(5))

感谢您的帮助!

3 个答案:

答案 0 :(得分:0)

这样的事情怎么样?

/(".+?)"(.+?),\s+?"(.+?[.?!]+")/g

然后按此顺序替换捕获组:

$1 $3$2.
像这样:

m.group(1) + " " + m.group(3) + m.group(2) + "."

实施例

  

“你好,”乔希热情地说,“我有一个问题!”

  

“你好,我有一个问题!”乔希热情地说。

说明:

http://bsite.cc/inoD/Screen%20Shot%202017-01-18%20at%206.01.22%20PM.png

  1. 第一部分匹配",然后匹配任何字符,直到它看到另一个引号。
    • "Hello, | Josh热情地说,”我有一个问题!“
  2. 第二部分匹配引号中间的文本,直到达到逗号(也匹配逗号和第一个引号后的空白)
    • “你好”,Josh said enthusiastically | “我有疑问!”
  3. 第三组匹配到下一个引用
    • “你好,”Josh热情地说,“I have a question!"

答案 1 :(得分:0)

试试这个正则表达式:

(?<=\")([^\s].*?[^\s])(?=\")|(?<=\")\s(.*?)\s(?=\")

上面的正则表达式将匹配这两个字符串:第1组中的Hello,I have a question!,这样您就可以将它们打印在一起。相同的正则表达式将区分此部分Josh said enthusiastically,并将其与第2组匹配,以便在您决定稍后使用它时将会很方便。

查看演示:https://regex101.com/r/m7nqnu/1

这是一个有效的Python代码:

import re
text = '''"Hello," Josh said enthusiastically, "I have a question!"'''
print ('Group 1: ')
for m in re.finditer(r"(?<=\")([^\s].*?[^\s])(?=\")|(?<=\")\s(.*?)\s(?=\")", text):
    if m.group(1) is not None:
        print('%s ' % (m.group(1)))
print ('<br />Group 2: ')
for m in re.finditer(r"(?<=\")([^\s].*?[^\s])(?=\")|(?<=\")\s(.*?)\s(?=\")", text):
    if m.group(2) is not None:
        print('%s ' % (m.group(2)))

输出:

Group 1: Hello, I have a question! 
Group 2: Josh said enthusiastically,

答案 2 :(得分:0)

只要引号内没有引号,并且所有引号都正确匹配,并且该短语总是由两个带引号的部分组成,中间部分带有不带引号的部分:

parts = [x.strip() for x in re.findall(r'"([^"]+)', text)]
print(parts[0] + " " + parts[2])
# Hello, I have a question!
print(parts[1])
# Josh said enthusiastically,