在整个文本中查找编程代码的开始和结束

时间:2015-10-28 09:16:50

标签: python html regex python-2.7 parsing

我有html文本和编程代码(Generic),没有任何区别或标记。有一种方法可以为代码的开头和结尾添加标记,适用于任何编程代码吗?

例如:

start message

Hello this is an example

int main(){ 
char word1[21],word2[21]; 
int first; 
printf("Type in the first word (maximum 20 characters):\n"); 
scanf("%20s",word1); 

other text

ends

我想获得:

Hello this is an example

'''

int main(){ 
char word1[21],word2[21];  
int first; 
printf("Type in the first word (maximum 20 characters):\n"); 
scanf("%20s",word1); 

'''

other text

1 个答案:

答案 0 :(得分:2)

让我试试答案:

在您给出的限制范围内(无),这是不可能的。

如果您对期望的编程语言以及期望的其他非编程文本(语言,科学,街头语言)没有限制,并且您也完全没有分隔符,则无法区分这两种。< / p>

问题是那里有编程语言可能看起来非常像普通文本 - 特别是如果样本量很小。

如果您有十几行TclRebol,您可以对此进行统计分析。标点符号和特殊字符与普通文本的预期(低)值。如果代码总是通过新段落或至少换行符号与文本分开,则这种方式尤其有效。

但即便如此,这真的很难。一个REBOL example

REBOL [
    Title: "REBOL/Services Simple Example"
    Author: "Carl Sassenrath"
    Version: 1.0.0
]
url: http://www.rebol.net/cgi-bin/services.r
print "Loading client..." ; Used until it is built-into REBOL
do http://www.rebol.net/rebservices/client.r
print "Sending command..."
result: do-service url [info]
print ["Result:" mold/only result]
ask "Done."

以上段落非常类似于带有脚注[info]和url引用的科学文本。

也许html中的代码前后总是有<br><p>

然而,对于非常短的代码片段,这样的分析可能会失败。您的html也可能包含非常接近编程语言的文本。将数学方程式或公式与LispR

等内容进行比较
x <- c(10.4, 5.6, 3.1, 6.4, 21.7)

上述与数学主题的论文有何不同?

所以你必须妥协。

一些方法:

  • 限制检测到的编程语言的数量(可能是“神秘的”,使用许多特殊字符,如Perl,C(大括号)或Python(缩进和冒号))
  • 将标记添加到html或接受<br>,或<p>甚至只是\n是有效的分隔符。当然html包含<verbatim>或其他标签来分隔代码?

然后对

进行一些统计分析
  • 特殊字符的使用,
  • 更改缩进级别,
  • 行长度的变化,
  • 正在使用的唯一字数
  • 重复单词(命令和变量名称可能比文本中的普通单词重复)
  • 语言标记(代码中很少见,但经常用于语言)