首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将HTML标记自动添加到.txt文件中的不同行中?

如何将HTML标记自动添加到.txt文件中的不同行中?
EN

Stack Overflow用户
提问于 2017-05-19 14:11:41
回答 3查看 194关注 0票数 0

因此,我有一个.txt文件,几乎有10000行,每一行都是分开的,并按顺序排列。这是个问题库。

格式是这样的

代码语言:javascript
运行
复制
1 Question
2 Answer 1
3 Answer 2
4 Answer 3
5 Answer 4
6 Answer 5
7 Question
8 Answer 1
9 Answer 2
10 Answer 3
11 Answer 4
12 Answer 5
and so forth..

我的问题是--我想选择文档中的所有答案选项,并在文档中这些行的开头和结尾添加HTML标记。如果不手动操作,我怎么能做到这一点?我还想只选择1,7,13行来选择问题,并在这些行的开头和结尾分别给出html标记。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-05-19 15:14:10

印刷问题:

代码语言:javascript
运行
复制
for i in `seq 1 6 30`; do sed -n "${i}p" sample.txt; done

输出

代码语言:javascript
运行
复制
1 Question
7 Question

仅向问题添加HTML标记:

代码语言:javascript
运行
复制
for i in `seq 1 6 30`; do sed -i -E  "${i}s/(^.*)/<questiontag>\1<\/questiontag>/g" sample.txt; done

只向答案添加HTML标记:

代码语言:javascript
运行
复制
for i in `seq 1 6 30`; do qs=$(($i+1)); qe=$(($i+5)) ; sed -i -E  "${qs},${qe}s/(^.*)/<answertag>\1<\/answertag>/g" sample.txt; done

sample.txt含量

代码语言:javascript
运行
复制
<questiontag>1 Question</questiontag>
<answertag>2 Answer 1</answertag>
<answertag>3 Answer 2</answertag>
<answertag>4 Answer 3</answertag>
<answertag>5 Answer 4</answertag>
<answertag>6 Answer 5</answertag>
<questiontag>7 Question</questiontag>
<answertag>8 Answer 1</answertag>
<answertag>9 Answer 2</answertag>
<answertag>10 Answer 3</answertag>
<answertag>11 Answer 4</answertag>
<answertag>12 Answer 5</answertag>

您将需要使用您选择的数量(如30 )来更改100000,也可以用$(wc -l < sample.txt)替换它,后者将返回sample.txt的行数。例如:

代码语言:javascript
运行
复制
for i in `seq 1 6 $(wc -l < sample.txt)`; do sed -n "${i}p" sample.txt; done
票数 1
EN

Stack Overflow用户

发布于 2017-05-19 15:07:06

我猜你在找这样的东西..。

匹配精确模式

代码语言:javascript
运行
复制
\d+\sQuestion(.*$)\s\d+\sAnswer(.*)\s\d+\sAnswer(.*)\s\d+\sAnswer(.*)\s\d+\sAnswer(.*)\s\d+\sAnswer(.*)

用HTML等价物替换

代码语言:javascript
运行
复制
<h1>$1</h1>\n<ol>\n<li>$2</li>\n<li>$3</li>\n<li>$4</li>\n<li>$5</li>\n<li>$6</li>\n</ol>

(regex101)

票数 2
EN

Stack Overflow用户

发布于 2017-05-19 15:11:56

方法1

进行尝试的最佳方法可能是编写一些逐行读取文本文件以更改代码的代码。

假设n =行数

代码语言:javascript
运行
复制
if((n-1)%6 === 0) // Question
else // Answer

方法2

据我所见,有两种行格式。

  • 问句以数字开头,以新行/回车结束。
  • 答案以数字开头,以数字结尾,后面跟着新行/回车。

假设除新行之外的任何字符都可能在问答中。

标识所有问题的Regex:/^(\d+\s)(.+?(?<!\d))$/gm

识别所有答案的Regex:/^(\d+\s)(.+)(\s\d+)$/gm

这假设没有任何问题以数字结尾。

PHP代码示例

我现在不能测试这个,但是它应该类似于下面的代码。

代码语言:javascript
运行
复制
$file = 'my/file.txt'
$contents = file($file);
$result = [];

$regexes = [
    'question' => [
        'regex' => '/^(\d+\s.+?\s?(?<!\d))$/gm',
        'replace' => '<div>$2</div>'
    ],
    'answer' => [
        'regex' => '/^(\d+\s)(.+)(\s\d+)$/gm',
        'replace' => '<div>$2</div>'
    ]
];
foreach($contents as $line) {
    foreach($regexes as $regex) {
        if(preg_match($regex['regex'], $line)) {
            $result[] = preg_replace($regex['regex'], $regex['replace'], $line);
        }
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44072286

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档