#python #regex #nlp #javadoc
#python #регулярное выражение #nlp #Javadoc
Вопрос:
Я пытаюсь извлечь текст в Javadoc перед тегами Javadoc в python. До сих пор мне удавалось избегать тега parameter, но есть и другие теги Javadoc, которые можно было бы упомянуть все сразу. Есть ли лучший способ сделать это?
parameterTag = "@param"
if (parameterTag in comments):
splitComments = subsentence.split(my_string[my_string.find(start) 1: my_string.find(parameterTag)])
Ввод:
/**
* Checks if the given node is inside the graph and
* throws exception if the given node is null
* @param a single node to be check
* @return true if given node is contained in graph,
* return false otherwise
* @requires given node != null
*/
public boolean containsNode(E node){
if(node==null){
throw new IllegalArgumentException();
}
if(graph.containsKey(node)){
return true;
}
return false;
}
Вывод:
/**
* Checks if the given node is inside the graph and
* throws exception if the given node is null
*/
public boolean containsNode(E node){
if(node==null){
throw new IllegalArgumentException();
}
if(graph.containsKey(node)){
return true;
}
return false;
}
Комментарии:
1. Вы хотите рассмотреть возможность использования регулярных выражений? Я имею в виду, общий формат * @ [буквы] [текст]
2. Конечно! Не могли бы вы сказать мне, как? Я новичок в регулярных выражениях, поэтому, возможно, потребуется дополнительная информация: D Спасибо!
Ответ №1:
Следуя вашей логике, есть часть описания, за которой следует часть «теги», а затем закрывающий комментарий.
Если вы проверяете построчно вхождение ключевого слова tag, вы не сможете работать с этой строкой:
* return false otherwise
Следовательно, вам нужно определить, вошли ли вы в или вышли из части тегов. Ниже рабочий пример:
import re
# Javascript content loading
JSF = open("your_js_file.js", 'r')
js_content = JSF.read()
# We split the script into lines, and then we'll loop through the array
lineiterator = iter(js_content.splitlines())
# This boolean marks if we are or not in a "tags" part
in_tags = False
for line in lineiterator:
# If we matched a line with a word starting with "@",
# Then we entered into a "tags" section
if re.search("@w ", line) is not None :
in_tags = True
# If we matched a closing comment mark, then we left
# The "tags" section (or never entered into it)
if re.search("*/",line) is not None:
in_tags = False
if not in_tags:
print(line)