正则表达式<。*?>

时间:2019-12-09 00:42:34

标签: python nlp

我是Python的新手,一直在看Kaggle上的文本清理示例,例如this,并且对词干和停用词部分有一些疑问。

for sentence in final_X:
  sentence = sentence.lower()                 # Converting to lowercase
  cleanr = re.compile('<.*?>')
  sentence = re.sub(cleanr, ' ', sentence)        #Removing HTML tags
  sentence = re.sub(r'[?|!|\'|"|#]',r'',sentence)
  sentence = re.sub(r'[.|,|)|(|\|/]',r' ',sentence)        #Removing Punctuations

cleanr = re.compile('<.*?>')是什么意思?我了解它是用来删除HTML标记的,但是我对<.*?>的含义感到困惑。

2 个答案:

答案 0 :(得分:2)

<.*?>被称为正则表达式模式。此模式特别先寻找<,然后再寻找任意数量的字符.*,后跟>。 句点.表示“任何字符”,星号*表示“ 0次或多次”。 ?后面的问号*是惰性量词,表示它应消耗尽可能少的字符。对于这样的情况,这很重要:

<p> 2 > 1 </p>

如果问号不存在,则模式将与此匹配: <p> 2 > 1 </p>

如果问题在此处,它将查找像>之后的第一个< <p> 2 > 1 </p> ,这是理想的结果

答案 1 :(得分:0)

这是一个 regex 模式。此模式<.*?>表示一个字符串,其中包含<,后跟任意字符(按点编码),重复任意次(按星号编码),最后>在星号后的问号就是让它变得懒惰,即比赛在>之后遇到的第一个<处停止。

请参见https://medium.com/factory-mind/regex-tutorial-a-simple-cheatsheet-by-examples-649dc1c3f285,以了解有关正则表达式的更多信息。

实际上可以是

sentence = re.sub('<.*?>', ' ', sentence)

代替

cleanr = re.compile('<.*?>')
sentence = re.sub(cleanr, ' ', sentence)

否则cleanr = re.compile('<.*?>')应该在for循环之前进行优化。