区分双字符和单字符?

时间:2016-10-06 21:19:46

标签: python regex

对于我必须使用的字典,我有一个奇怪的变量名称,如下所示:

val.display_counter1.rjj = {} 

这是非法的,所以我决定使用这种格式:

val_display__counter1_rjj = {}

稍后在代码中我需要将该dict变量名称与原始名称相匹配。所以我试图找到一种方法来用点替换那些单个下划线,并用单个下划线替换双下划线。我确信有一个正则表达式解决方案,但正则表达式不是我的强项。

有没有办法有选择地替换这样的?

修改

我的问题有些混乱,所以请允许我澄清一下。原名:

  

val.display_counter1.rjj

这本身不是变量,而只是3D软件包Modo中的项目名称。有许多项目共享此格式。我想要做的是创建一类将存储有关这些项目的信息的dicts。我想为项目命名,并能够在程序中匹配它们。

对于我进行这场比赛,我需要将我的dict名称还原为原来的所以我可以进行比赛:

  

val_display__counter1_rjj - > val.display_counter1.rjj

我需要知道的是如何使正则表达式只匹配单个下划线并丢弃其他下划线所包围的匹配。

另外,不确定为什么这被标记为重复。但我的问题不涉及动态变量。

1 个答案:

答案 0 :(得分:-1)

好吧,我是Python新手。 但希望这有效!!!

    import re;
    val_display__counter1_rij= {};
    l = ['val_display__counter1_rij', 'val_display___counter1_rij','val.display__counter1_rij']  # list of variables to match
    for x in l:
       if "." not in x:
          article = re.sub(r'(?is)_', '.', x)
          if ".." in article:
              article= article.replace("..","__");

          if (article == 'val.display__counter1.rij'):
              print(article)