Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将HTML标记自动添加到升华文本中.txt文件的不同行?_Html_Regex_File_Sublimetext3 - Fatal编程技术网

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

如何将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标记添加到文档中这些行的开头和结尾。

所以我有一个.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,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上,您可以直接从命令行(终端)使用它,因为它们是