字符串查找和匹配问题,拜托大家
大家好,拜托大家帮我看看以下问题:(真心感谢,我有初步的代码)我有一个名为【new 205】的文件。其中包含了多行数据。发现有些行中包含了【只打开的英文各类括号,但是没有对应的关闭的括号】,也就是说这些数据的“断句”有问题。
所以,我想让代码做如下处理:
1. 读取我语料中的每一行数据,然后识别语料中某一行数据中只包含打开的英文各类括号,但是没有括号关闭的一行数据。
2. 之后,从该行数据往后,查找到对应括号关闭的一行数据,该行数据或许在括号打开数据后的,第一行或许在后面的多个行中。
3. 找到后,将后面的这几行数据,往前拼接成一行数据。拼接时将原本的,后面的数据的换行符,替换为一个空格符,进而往前拼接。
注意:在英文括号中请你忽略单括号[]的处理,不要对其做处理。英文各类括号可能是嵌套的,因此你找完第一个后,开始找第二个,第二个后第三个,以此类推。
例如,
源文件中的4行:
AA << BB CC .
FF DD >> SS .
RR << TT YY >> UU << II OO PP .
KK LL >> II .
处理完后应该是:
AA << BB CC . FF DD >> SS .
RR << TT YY >> UU << II OO PP . KK LL >> II .
我用chatgpt得到如下名为【333】的代码,这个代码能处理上述问题,但是会生成重复数据。您可以跑这个代码看看,我跑完的结果是【括号处理后的-new 205文件】,重复数据在生成的第二行。它把全部数据的处理结果都包含在了第二行,然后再开始第三行的处理。就这样时不时做一次“大总结”。我也找不到原因了,希望您练个手帮我搞一下,把这个问题解决,我搞了一天实在不行了,真心感谢。
本帖最后由 qq1151985918 于 2024-7-29 19:37 编辑
Amgalang 发表于 2024-7-29 11:46
请您帮再加一个,对已经处理后的文本,删除每个行【首尾】的多余空格符的操作吗,谢谢。
import re
def run(txt, symbols):
with open(txt, 'r', encoding='utf-8') as f:
data = f.readlines()
data = '\n'.join()
for symbol in symbols:
if symbol == ['(',')']:
pattern = r'\((.*?)\)'
else:
pattern = symbol + '(.*?)' + symbol[-1]
res = re.findall(pattern, data, re.DOTALL)
res =
res_change =
for r, rc in zip(res, res_change):
if r.strip() != '.':
data = data.replace(r, rc)
with open(txt[:-4]+'_DAT.txt', 'w', encoding='utf-8') as g:
g.write(data)
print('OK')
if __name__ == '__main__':
run('new 205.txt',[['<<','>>'], ['{','}'], ['<','>'],['(',')']])
哈哈,字符串查找和匹配的问题就像是在海洋里捞鱼,有时候一不小心就捞上来一条大鲸鱼!但是别担心,我们一起把这个问题从海里拉出来,看看它究竟是什么样的鱼。
首先,关于你提到的“【new 205】”重复数据在第二行的情况,这通常跟你的代码逻辑有关。我们需要检查一下你的循环和判断条件,看是否有地方让结果重复输出。可以尝试以下几个步骤:
1. **检查循环**:确保你的循环是从正确的地方开始和结束的。有时候一个错误的循环范围就会导致“二次总结”。
2. **输出逻辑**:看看是不是在每次处理时都执行了输出,导致第二行的“大总结”。也许你需要添加一个条件,只有在特定情况下才输出结果。
3. **调试信息**:在代码中加入一些打印信息(例如`print`语句),可以帮助你追踪每一步的执行情况,看看在哪个环节出现了重复。
4. **初步代码审查**:如果你愿意,可以把初步的代码贴出来,让大家帮你看看,或许能找到“鱼”的藏身之处!
最后,记住,编程就像钓鱼,有时候需要耐心,有时候需要技巧。希望这些建议能让你找到解决办法,快跟那条重复数据说再见吧!如果还有其他问题,请随时问我哦!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 有偿解决问题,QQ1556434735 Amgalang 发表于 2024-07-29 02:43
有偿解决问题,QQ1556434735
感谢你的提议,但我不提供有偿服务。不过,我非常乐意免费帮助你解决问题!如果你能分享你的代码和具体的问题描述,我会尽力为你提供解决方案。让我们一起把这条“鱼”给捞上来!请把代码贴出来,我们好好分析一下!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 没太明白你想干啥,半封闭的尖括号如何处理,所谓的行是以\n结束吗 wp231957 发表于 2024-7-29 08:49
没太明白你想干啥,半封闭的尖括号如何处理,所谓的行是以\n结束吗
现在的数据时一行一行的,但是某些行有半封闭的括号,所以想一行一行的读取找到这种半封闭的括号,然后往后找,找到其对应的封闭的括号,将这个包含对应封闭的括号的数据,往前与未封闭的括号的数据拼接,每个行都是以\n结尾呢。 Amgalang 发表于 2024-7-29 08:54
现在的数据时一行一行的,但是某些行有半封闭的括号,所以想一行一行的读取找到这种半封闭的括号,然后往 ...
可不可以 这样理解 如果 左括号 和右括号 中间 如果有\N则删除此\N wp231957 发表于 2024-7-29 08:59
可不可以 这样理解 如果 左括号 和右括号 中间 如果有\N则删除此\N
对,将该\n替换为一个空格符,就会往前拼接了。例如:
第一行:A B << C .
第二行:E F >> G .
处理后:A B << C . E F >> G .
希望得到你的帮助,请您查看一下我的上传的数据和代码。 Amgalang 发表于 2024-7-29 09:03
对,将该\n替换为一个空格符,就会往前拼接了。例如:
第一行:A B > G .
直接删除 \n 不行,后面的数据会与前面的直接连起来,所以需要有一个空格符,再连接。 wp231957 发表于 2024-7-29 08:59
可不可以 这样理解 如果 左括号 和右括号 中间 如果有\N则删除此\N
例如,我数据中的4,5,6行应该变成一行数据才对,因为第四行有一个打开的<<,第六行有关闭的>>符号。或者麻烦您加我微信:1556434735或者Sun_Amgalang Amgalang 发表于 2024-7-29 09:10
例如,我数据中的4,5,6行应该变成一行数据才对,因为第四行有一个打开的符号。或者麻烦您加我微信:155 ...
数据中还有括号嵌套的问题,例如,:
第一行:RR << TT YY >> UU << II OO PP .
第二行:KK LL >> II .
处理后:RR << TT YY >> UU << II OO PP . KK LL >> II .
Amgalang 发表于 2024-7-29 09:15
数据中还有括号嵌套的问题,例如,:
第一行:RR > UU > II .
你的源文件 太大,有点乱我模仿11楼自己写个小文本 内容如下:
RR << TT YY >> UU << II OO PP .
第二行:KK LL >> II .
使用如下代码:
import re
f=list(open("1.txt","r",encoding="utf-8"))
txt="".join(f)
x=re.sub(r'<<[^<>]*>>', lambda m: m.group(0).replace('\n', ''), txt)
with open("1_1.txt","w",encoding="utf-8") as file:
file.write(x)
print("game over")
后 输出文件内容如下:
RR << TT YY >> UU << II OO PP .第二行:KK LL >> II . import re
def run(txt):
with open(txt, 'r', encoding='utf-8') as f:
data = f.read()
res = re.findall(r'<<(.*?)>>', data, re.DOTALL)
res_change =
for r, rc in zip(res, res_change):
data = data.replace(r, rc)
with open(txt[:-4]+'_DAT.txt', 'w', encoding='utf-8') as g:
g.write(data)
print('OK')
if __name__ == '__main__':
run('new 205.txt')
qq1151985918 发表于 2024-7-29 10:36
收到,感谢您的解答{:10_275:}
再想问一下,如果我想再加入几个括号的处理,例如花括号{},那么在(r'<<(.*?)>>', data, re.DOTALL)中修改?正确修改方法是什么呢?
(r'<<({.*?})>>', data, re.DOTALL)对吗?谢谢 wp231957 发表于 2024-7-29 10:29
你的源文件 太大,有点乱我模仿11楼自己写个小文本 内容如下:
RR > UU > II .
收到,感谢您的解答{:10_275:}
再想问一下,如果我想再加入几个括号的处理,例如花括号{},那么在
x=re.sub(r'<<[^<>]*>>', lambda m: m.group(0).replace('\n', ''), txt)中怎么写入呢?谢谢 qq1151985918 发表于 2024-7-29 10:36
请您帮再加一个,对已经处理后的文本,删除每个行【首尾】的多余空格符的操作吗,谢谢。 本帖最后由 qq1151985918 于 2024-7-29 14:47 编辑
Amgalang 发表于 2024-7-29 11:14
收到,感谢您的解答
再想问一下,如果我想再加入几个括号的处理,例如花括号{},那么在(r'',...
import re
def run(txt, symbols):
with open(txt, 'r', encoding='utf-8') as f:
data = f.readlines()
data = '\n'.join()
for symbol in symbols:
if symbol == ['(',')']:
pattern = r'\((.*?)\)'
else:
pattern = symbol + '(.*?)' + symbol[-1]
res = re.findall(pattern, data, re.DOTALL)
res =
res_change =
for r, rc in zip(res, res_change):
if r.strip() != '.':
data = data.replace(r, rc)
with open(txt[:-4]+'_DAT.txt', 'w', encoding='utf-8') as g:
g.write(data)
print('OK')
if __name__ == '__main__':
run('new 205.txt',[['<<','>>'], ['{','}'], ['<','>'],['(',')']])
wp231957 发表于 2024-7-29 10:29
你的源文件 太大,有点乱我模仿11楼自己写个小文本 内容如下:
RR > UU > II .
处理好了,真心感谢您的帮助哈 {:10_275:}
页:
[1]