我有一个大文件(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))
感谢您的帮助!
答案 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
"
,然后匹配任何字符,直到它看到另一个引号。
"Hello,
“ | Josh热情地说,”我有一个问题!“Josh said enthusiastically
, | “我有疑问!”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,