【问题标题】:Reading all values that are left and right to <= from a big string in python从python中的大字符串中读取所有左右到<=的值
【发布时间】:2018-07-23 06:18:50
【问题描述】:

我有一个大字符串,并且想读取 {\nnode [shape=box] ;\n0 [label="X[2] <= 17055.5\\ngini = 0.0454\\nsamples = 43\\nvalue = [42, 1]"] ;\n1 [label="gini = 0.0\\nsamples = 1\\nvalue = [0, 1]"] ;\n0 -> 1 [labeldistance=2.5, labelangle=45, headlabel="True"] ;\n2 [label="gini = 0.0\\nsamples = 42\\nvalue = [42, 0]"] ;\n0 -> 2 [labeldistance=2.5, labelangle=-45, headlabel="False"] [label]="X[0] <= 5.41" ;\n} 这里我应该有两组输出,因为

python 正则表达式 python-3.x

【问题讨论】:

  • 你期望的输入输出是什么?
  • @heemayl 这是问题
  • x[2]
  • 等等,所以你基本上想在=&gt;上分割整个字符串?你试过re.split()吗?此外,很高兴展示您已经尝试过什么,以及为什么它不起作用。
  • 我明白了,在使用 re.split() 时代替

标签: python regex string python-3.x substring


【解决方案1】:

如果我理解正确,您希望&lt;= 周围的单词由"\ 分隔。如果是这样:

re.findall(r'["\\]([^"\\]+<=[^"\\]+)(?=["\\])', str_)
  • ["\\] 匹配 "\

  • 捕获的组([^"\\]+&lt;=[^"\\]+)匹配一个或多个不是"\的字符,然后是&lt;=,然后是一个或多个不是"或@的字符987654333@

  • 零和正向前瞻 (?=["\\]),确保捕获的组后跟 "\

示例:

In [171]: str_ = '{\nnode [shape=box] ;\n0 [label="X[2] <= 17055.5\\ngini = 0.0454\\nsamples = 43\\nvalue = [42, 1]"] ;\n1 [label="gini = 0.0\\nsamples = 1\\nvalue = [0, 1]"] ;\n0 -> 1 [labeldistance=2.5,
     ...:  labelangle=45, headlabel="True"] ;\n2 [label="gini = 0.0\\nsamples = 42\\nvalue = [42, 0]"] ;\n0 -> 2 [labeldistance=2.5, labelangle=-45, headlabel="False"] [label]="X[0] <= 5.41" ;\n}'

In [172]: re.findall(r'["\\]([^"\\]+<=[^"\\]+)(?=["\\])', str_)
Out[172]: ['X[2] <= 17055.5', 'X[0] <= 5.41']

【讨论】:

    【解决方案2】:

    你可以试试这个:

    [^\"<]+<=\s*[0-9.]*
    

    它可能会更快,但确实可以。

    Online demo

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-12
      • 2022-01-13
      • 2014-05-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多