1
votes

Comment vérifier si un caractère dans une ligne analysée fait partie d'une variable de chaîne en python

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 commentaires

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"'


3 Réponses :


1
votes

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 :)


0 commentaires

0
votes

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 >


0 commentaires

0
votes

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


0 commentaires