如何将HTML标记自动添加到升华文本中.txt文件的不同行?
所以我有一个.txt文件,几乎有10000行,每一行都是分开的,并且是有序的。这是一个问题库 格式是这样的如何将HTML标记自动添加到升华文本中.txt文件的不同行?,html,regex,file,sublimetext3,Html,Regex,File,Sublimetext3,所以我有一个.txt文件,几乎有10000行,每一行都是分开的,并且是有序的。这是一个问题库 格式是这样的 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 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标记。我假设您正在寻找类似的内容 精确匹配模式
\d+\sQuestion(.*$)\s\d+\sAnswer(.*)\s\d+\sAnswer(.*)\s\d+\sAnswer(.*)\s\d+\sAnswer(.*)\s\d+\sAnswer(.*)
替换为HTML等效项
<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>
$1\n\n$2 \n$3 \n$4 \n$5 \n$6 \n
()我想你是在找这样的东西 精确匹配模式
\d+\sQuestion(.*$)\s\d+\sAnswer(.*)\s\d+\sAnswer(.*)\s\d+\sAnswer(.*)\s\d+\sAnswer(.*)\s\d+\sAnswer(.*)
替换为HTML等效项
<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>
$1\n\n$2 \n$3 \n$4 \n$5 \n$6 \n
()方法1
最好的方法是编写一些逐行读取文本文件的代码来更改代码
假设n
=行号
if((n-1)%6 === 0) // Question
else // Answer
方法2
据我所见,有两种行格式
- 问题以数字开始,以新行/回车结束
- 答案以数字开头,以数字结尾,然后是新行/回车
/^(\d++\s)(.+?(?
正则表达式识别所有答案:/^(\d+\s)(.+)(\s\d+)$/gm
这假设没有问题以数字结尾
PHP中的代码示例
我现在不能测试它,但它应该类似于下面的代码
$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);
}
}
}
$file='my/file.txt'
$contents=文件($file);
$result=[];
$regexes=[
“问题”=>[
'正则表达式'=>'/^(\d+\s.+?\s?(?$2'
],
“答案”=>[
“regex'=>'/^(\d+\s)(.+)(\s\d+)$/gm',
'替换'=>'$2'
]
];
foreach($行内容){
foreach($regex作为$regex){
if(预匹配($regex['regex'],$line)){
$result[]=preg_replace($regex['regex'],$regex['replace'],$line);
}
}
}
方法1
最好的方法是编写一些逐行读取文本文件的代码来更改代码
假设n
=行号
if((n-1)%6 === 0) // Question
else // Answer
方法2
据我所见,有两种行格式
- 问题以数字开始,以新行/回车结束
- 答案以数字开头,以数字结尾,然后是新行/回车
假设除了新行以外的任何字符都可以在问题或答案中
正则表达式识别所有问题:/^(\d++\s)(.+?(?
正则表达式识别所有答案:/^(\d+\s)(.+)(\s\d+)$/gm
这假设没有问题以数字结尾
PHP中的代码示例
我现在不能测试它,但它应该类似于下面的代码
$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);
}
}
}
$file='my/file.txt'
$contents=文件($file);
$result=[];
$regexes=[
“问题”=>[
'正则表达式'=>'/^(\d+\s.+?\s?(?$2'
],
“答案”=>[
“regex'=>'/^(\d+\s)(.+)(\s\d+)$/gm',
'替换'=>'$2'
]
];
foreach($行内容){
foreach($regex作为$regex){
if(预匹配($regex['regex'],$line)){
$result[]=preg_replace($regex['regex'],$regex['replace'],$line);
}
}
}
打印问题:
for i in `seq 1 6 30`; do sed -n "${i}p" sample.txt; done
输出
1 Question
7 Question
仅向问题添加HTML标记:
for i in `seq 1 6 30`; do sed -i -E "${i}s/(^.*)/<questiontag>\1<\/questiontag>/g" sample.txt; done
您需要更改30
,选择一个数字,如100000
,或者您可以将其替换为$(wc-l
,该数字将返回sample.txt的行数。例如
for i in `seq 1 6 $(wc -l < sample.txt)`; do sed -n "${i}p" sample.txt; done
`seq 16$(wc-l
打印问题:
for i in `seq 1 6 30`; do sed -n "${i}p" sample.txt; done
输出
1 Question
7 Question
仅向问题添加HTML标记:
for i in `seq 1 6 30`; do sed -i -E "${i}s/(^.*)/<questiontag>\1<\/questiontag>/g" sample.txt; done
您需要更改30
,选择一个数字,如100000
,或者您可以将其替换为$(wc-l
,该数字将返回sample.txt的行数。例如
for i in `seq 1 6 $(wc -l < sample.txt)`; do sed -n "${i}p" sample.txt; done
`seq 16$(wc-l
什么将带问题的行与带答案的行分开?(我假设在您的示例中,“问题”和“答案”只是实际文本的占位符。)这就是文件给我的方式。有10k行,有一行问题行,后面有五行答案行。它重复的方式就是这样。1=问题,2,3,4,5,6=答案//7=问题,8,9,10,11,12=答案,13=问题
等等。是的,这是正确的ClasG,这是一个普通的txt文档,这是占位符文本。它是否像你要找的一样?(它假设,正如你所说,总是有一行带问题的行,后面有5行带答案的行。)带问题的行和带答案的行之间的区别是什么?(我假设在你的示例中,“问题”和“答案”只是实际文本的占位符。)这就是文件给我的方式。有10k行,有一行问题行,后面有五行答案行。它重复的方式就是这样。1=问题,2,3,4,5,6=答案//7=问题,8,9,10,11,12=答案,13=问题
等等。是的,这是正确的ClasG,这是一个普通的txt文档,这是占位符文本。这是您想要的东西吗?(它假设在那里,正如您所说,总是有一行带问题,后面有5行带答案。)这是PHP吗?这意味着如何使用?您可以直接从命令行(终端)使用它在linux或macOS上,这些是shell命令。这与PHP一起使用吗?这意味着如何使用?在linux或macOS上,您可以直接从命令行(终端)使用它,因为它们是