J'essaie d'implémenter en python une fonction qui vérifie si le symbole '#' à l'intérieur d'une ligne analysée fait partie d'une variable de chaîne.
def comment_part_of_string(line, comment_idx):
"""
:param comment_idx: index of '#' symbol in line
:param line: stripped line that has '#' symbol
:return: return True when the '#' symbol is inside a string variable
"""
if ((line[:comment_idx].count(b"\'") % 2 == 1 and line[comment_idx:].count(b"\'") % 2 == 1)
or (line[:comment_idx].count(b"\"") % 2 == 1 and line[comment_idx:].count(b"\"") % 2 == 1)):
return True
return False
par exemple, je veux que la fonction renvoie True pour:
> line="peace#love"
> comment_idx=line.find('#')
et False pour:
> line="peace'and#much'love"
> comment_idx=line.find('#')
Comment puis-je vérifier si un caractère dans une ligne analysée est partie d'une variable chaîne?
modifier J'ai essayé ceci et cela a également fonctionné:
def comment_part_of_string(line,comment_idx):
"""
:param line: stripped line that has '#' symbol
comment_idx: index of '#' symbol in line
:return: return True when the '#' symbol is inside a string variable
"""
3 Réponses :
Vous pouvez le faire en vérifiant le nombre de guillemets simples ( ') avant le symbole # . S'il est pair, cela signifie qu'il est en dehors d'un littéral de chaîne et s'il est impair, alors il est à l'intérieur d'une chaîne. Faites-le comme ceci:
def comment_part_of_string(line, comment_idx):
"""
:param line: stripped line that has '#' symbol
comment_idx: index of '#' symbol in line
:return: return True when the '#' symbol is inside a string variable
"""
count = line.split(line[comment_idx])[0].count("'")
if(count % 2):
return True
else:
return False
J'espère que cela vous aidera :)
Je pense que cela devrait fonctionner
def iscomment(line):
line = line.split(" ")
for i in line:
if "#" in i:
if '"' in i or "'" in i:
return True
return False
Il divise la ligne pour les espaces, puis passe par des parties de la ligne et s'il trouve 'ou "et # en ligne, il renvoie True. p >
Ce problème peut être résolu à l'aide de regex.
Remarque: les chaînes peuvent être à l'intérieur de 'ou ". Il faut donc en tenir compte également.
>>> comment_part_of_string("peace'and#much'love")
True
>>> comment_part_of_string("peace#love")
False
>>> comment_part_of_string('peace"and#much"love')
True
Sortie:
import re
def comment_part_of_string(line):
pattern=r'\'.*#.*\'|\".*#.*\"'
if re.findall(pattern,line):
return True
return False
Qu'avez-vous essayé jusqu'à présent pour obtenir cette sortie?
Est-ce la ligne analysée qui est en python ou le programme qui effectue la vérification qui est en python? Dans quel sens "peace # love" est-il une "ligne analysée"?
Oui, j'essaye d'analyser un code en python. parsed_line est une ligne analysée à partir d'un code python. par exemple: A = "peace # love" puis line = 'A = "peace # love"'