【问题标题】:How to match only quotes around word that has only numbers in it?如何仅匹配仅包含数字的单词周围的引号?
【发布时间】:2018-08-31 12:10:19
【问题描述】:

如何匹配数字周围的引号: 这是我所拥有的:

"Austria","AU","ULO1","185","34","4dera"

这是我需要的:

"Austria","AU","ULO1",185,34,"4dera"

这是我做的最接近的:\"(?=\d)|(?<=\d)\", 但问题在于它也匹配以数字开头的单词,我不能将+,*. 放在后视或前瞻中。我正在尝试像这样更改 1400 行的 .csv 文件。我可以用 Notepad++ 替换它,因为它支持正则表达式或 python 脚本。

【问题讨论】:

  • 您需要提供更多上下文。这个数据是什么 - 它是一个字符串列表,还是什么?它来自哪里?
  • 这是一个 csv 文件吗?
  • 是的,这是 csv 文件
  • 我猜isdigit() 将有助于检查给定的字符串是否仅包含数字字符,但如果你仍然想要一个正则表达式,那么我猜^\"\d+\"$ 会起作用
  • 这里根本不需要正则表达式。

标签: python regex regex-negation


【解决方案1】:
list1 = ["Austria","AU","ULO1","185","34","4dera"]

list2 = []

for item in list1:    
    try:
        list2.append(int(item))
    except ValueError:
        list2.append(item)

应该为字符串返回strings,为list2中的数字返回int

【讨论】:

    【解决方案2】:
    import re
    s = '"Austria","AU","ULO1","185","34","4dera"'
    print(re.sub(r'"(\d+)"',r'\1',s))
    

    匹配" 中包含的每个数字,并将其替换为不带" 的数字。

    【讨论】:

      【解决方案3】:

      在记事本++中

      搜索:\"(\d+)\" 替换为:\1

      【讨论】:

      • 谢谢冠军!!这正是我想要的。如果可以选择不写,我不想写代码。
      【解决方案4】:

      您可以使用str.isdigit()

      例如:

      import csv
      
      with open(filename, "r") as infile:
          reader = csv.reader(infile)
          for row in reader:
              print([int(i) if i.isdigit() else i for i in row])
      

      输出:

      ['Austria', 'AU', 'ULO1', 185, 34, '4dera']
      

      【讨论】:

        猜你喜欢
        • 2022-11-19
        • 2020-02-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-05-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多