【问题标题】:Regex - Match column name in a CSV string正则表达式 - 匹配 CSV 字符串中的列名
【发布时间】:2017-12-13 18:38:32
【问题描述】:

在这里完成正则表达式新手,如果这是一个愚蠢的问题,请原谅我。我在表单的 CSV 文件中有一行:

test_id|column1|column10|column11|column101|

并且我需要能够匹配 Python 中以下一项的第一次出现并获取其在字符串中的位置:

column1|, |column1| or |column1

我尝试在https://regexr.com/ 上使用[\|]?column1[\|]? 来查看它的运行情况,但它与其中包含column1 的所有内容相匹配。我该怎么办?

编辑:我完全同意 cmets 的观点,即这里不需要使用 Python 的 Regex。但是,如果我只想使用正则表达式匹配模式,我该怎么做呢?

【问题讨论】:

  • 你不能使用“column1 后跟一个非字母字符”吗?
  • 你可以试试line.split('|').index('column1')。这将为您提供“column1”在您的列列表中的位置,或者如果找不到任何内容,请提高 ValueError
  • 你为什么要为此使用正则表达式??
  • 字符串或管道的开头,然后是column1,然后是管道或换行符。或者只是使用带有管道分隔的 csv 解析器打开文件,并检查行中是否有任何项目等于您的搜索字符串。
  • import re; p = re.compile(r'column1'); m = p.search(line); m.start(); m.group(0)

标签: python regex csv


【解决方案1】:

如果您说将行存储为字符串,那么:

str1 = "test_id|column1|column10|column11|column101|"

然后您可以使用index() 方法来查找您要查找的每个匹配项的索引。

strs = ["column1|", "|column1|", "|column1"]

for s in strs:
    print(str1.index(s))

显然您必须进行错误检查,但这会返回索引。

打印出来:

8
7
7

【讨论】:

    猜你喜欢
    • 2010-09-15
    • 2012-06-05
    • 2013-12-25
    • 1970-01-01
    相关资源
    最近更新 更多