文档处理问题

337 天前
 TUTU2014
背景介绍:

1 ,文档为中文文档有几千行;
2 ,每行的字符类型组合为「中文」「标点符号」「制表键( TAB 键)」;
3 ,每行的格式为:「 XXX 制表键 XXXXXXX 」 其中:XXX 均为中文字符,但制表键前的中文字符可长可短(有可能两个也可能多个),注意:方括号「」不是格式的一部分;

需求:

1 ,要将每行中,制表键前面为两个的中文字符的行筛选出来,最好能将筛选后的结果,独立成为文档保存。
2 ,用正则表达式表达,或通过 EXCEL 表达;
3 ,我是程序小白,或者还有什么其他既能够满足需求又方便操作的手段,也可以赐教。


例如:

百毒不侵 1 ,任何毒物皆无法侵害。2 ,比喻修养功夫极佳,任何坏事皆无法影响。
百凡 泛指一切。
百废待兴 许多被废置的事业都等着兴办。
宝璐 美玉。
宝训 皇帝的言论诏谕、引申为宝贵的格言。
宝用 珍重使用。
百废俱兴 许多原已荒废松弛的事情都已重新兴办。比喻任事振作有为。

效果:

百凡 泛指一切。
宝璐 美玉。
宝训 皇帝的言论诏谕、引申为宝贵的格言。
宝用 珍重使用。

感谢!
749 次点击
所在节点    程序员
4 条回复
Pernalin
337 天前
^[\u4e00-\u9fa5]{3,}\t{1}.*\n
匹配开头中文大于三个的,全部替换成空就好了
最后一行得手动处理
Vegetable
337 天前
如果不追求自动化的话。

复制到 excel 里,制表符会自动分行,筛选条件自定义为??,就去掉了所有非两个字符的列。
在稍微排序一下,这样中文都会集中在一起,手动去掉非中文的就行了。
必要时可以添加辅助列,再基于第二个字符重新排列=RIGHT(A1,1)排序,去掉第二个字符不是汉字的行。缺点也是有的,顺序会变,不过也自然有办法回避,反正就几千行,Excel 几步就做完了。
Vegetable
337 天前
哦第一步是去掉行
lts9165
337 天前
如果你正在使用 Excel ,你可以使用这样的步骤来完成你的需求:

先将你的文档内容导入到 Excel 。假设内容在第一列( A 列)。

在第二列( B 列)你可以使用“寻找和替换”或者“长度”函数判断一行中制表符前的中文字符是否为两个。

"寻找和替换"可以通过替换掉制表符后的内容,然后看剩下的长度。具体操作是在 B 列第一个单元格(例如 B1 )输入这样的公式:=LEN(SUBSTITUTE(A1, MID(A1, FIND(CHAR(9), A1), 999), ""))。这个公式先找到制表符的位置,然后取出制表符后的所有内容,接着把这部分内容从原文中替换掉,最后计算剩下的长度。如果长度为 2 ,说明制表符前的中文字符是两个。

"长度"函数就直接计算制表符前的内容的长度。具体操作是在 B 列第一个单元格(例如 B1 )输入这样的公式:=LEN(LEFT(A1, FIND(CHAR(9), A1)-1))。这个公式先找到制表符的位置,然后取出制表符前的所有内容,最后计算这部分内容的长度。如果长度为 2 ,说明制表符前的中文字符是两个。

把刚刚输入的公式复制到整个 B 列。

过滤 B 列等于 2 的行,然后复制过滤后的 A 列的内容到新的 Excel 或者文档。

如果你在使用 Python 或其他编程语言,可以写一个简单的程序处理。例如在 Python 中,你可以使用下面的代码:

with open('原文件.txt', 'r', encoding='utf-8') as f_in, open('新文件.txt', 'w', encoding='utf-8') as f_out:
for line in f_in:
if len(line.split('\t')[0]) == 2:
f_out.write(line)
这段代码会读取'原文件.txt',然后把每一行中制表符前的中文字符是两个的行写入到'新文件.txt'。

以上两种方式应该都可以满足你的需求。如果还有问题,欢迎继续提问!
By chatgpt

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/945203

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX