如果在文本文件中的两个不同字符之间,Python
我基本上是在尝试使用python进行查找和替换,但使其仅适用于“{s:”和下面的“}”之间的字符串。我有一个包含以下内容的长文本文件:如果在文本文件中的两个不同字符之间,Python,python,if-statement,between,Python,If Statement,Between,我基本上是在尝试使用python进行查找和替换,但使其仅适用于“{s:”和下面的“}”之间的字符串。我有一个包含以下内容的长文本文件: ["c", "DashedSentence", {s: "Yo limpio mi cuarto todos los sábados."}, "Question", {q: "¿Cuándo limpio mi cuarto?", as: ["Todos los sábados.",
["c", "DashedSentence", {s: "Yo limpio mi cuarto todos los sábados."},
"Question", {q: "¿Cuándo limpio mi cuarto?",
as: ["Todos los sábados.",
"Todos los domingos."]}],
["c", "DashedSentence", {s: "Nosotros contestamos el correo cada semana."},
"Question", {q: "¿Con qué frecuencia contestamos el correo?",
as: ["Cada semana.",
"Cada dos semanas."]}],
最后,我希望短语在“s:”部分中按下划线分组,用“mi”替换“mi”,生成“mi_cuarto”,同样地,用“los”“el”。。。还有很多例子中没有的
到目前为止,我只知道:
s = open("stimuli.txt").read()
word = [' mi ','los ']
phrase = [' mi_',' los_']
for i in range(len(word)):
if BETWEEN "{s:" and "},":
s = s.replace(word[i],phrase[i])
f = open("stimuli_phrases.txt", 'w')
f.write(file)
当然,这不是真的,这就是我要找的。我可能没有以正确的方式处理这个问题,所以我也愿意接受任何其他想法!谢谢你的帮助,谢谢
编辑:{s:}部分中所需的输出组名词短语和介词短语,如下所示:
["c", "DashedSentence", {s: "Yo limpio mi_cuarto todos_los_sábados."},
"Question", {q: "¿Cuándo limpio mi cuarto?",
as: ["Todos los sábados.",
"Todos los domingos."]}],
["c", "DashedSentence", {s: "Nosotros contestamos el_correo cada_semana."},
"Question", {q: "¿Con qué frecuencia contestamos el correo?",
as: ["Cada semana.",
"Cada dos semanas."]}],
您提供的文件是,这意味着可以使用内置的
当然,如果您不希望或可以将此文件解析为json,可以使用:
要学习或练习正则表达式,请查看:
您可能需要学习
re
模块:请显示预期结果。您的as
示例容易混淆,并且与s
字符串不匹配。这可以用正则表达式来解决,但是as
短语需要一定程度的自然语言处理才能产生这种类型的结果。整个文本文件将在一个名为Ibex Farm的基于互联网的实验平台上使用。我不知道as短语和s字符串之间应该匹配什么,但我所展示的格式正是我所使用的平台所需要的格式,并且它可以毫无问题地工作(即,下面给出的问题有两个可点击的答案)。确切地说,我也发现了这一点。感谢考虑到对象键中缺少引号,我宁愿使用yaml。非常感谢JSON库的推荐。我需要好好研究一下,让它发挥作用。。。现在,复制和粘贴您提供的代码(但使用我的文件路径),它会给我一个错误--JSONDecodeError:期望属性名包含在双引号中--但您是对的,这是一个.js文件。。。有点这是一个文本文件,我将其复制并粘贴到一个更大的.js文件中,供ibexfarm用于在线实验。我不确定它们的格式要求是否与JSON完全相同,但至少我有了一个好的开始。谢谢
import json
with open("/path/to/your/file", "r") as f:
data = json.load(f)
for item in data:
try:
s = item['s']
except (TypeError, KeyError):
pass
import re
to_process = re.findall("{s:\"(.+)}\"", yourtext)