当前位置:  开发笔记 > 编程语言 > 正文

正则表达式匹配除某些分隔符之外的任何内容

如何解决《正则表达式匹配除某些分隔符之外的任何内容》经验,为你挑选了1个好方法。

我期待应用程序中的String看起来像:

约翰| COL-DELIM | DOE | COL-DELIM | 55 |行DELIM |乔治| COL-DELIM |杰特森| COL-DELIM | 90 |行DELIM |

我想做两件事:

1)验证字符串"看起来"是否正确(即它是否与正则表达式匹配)

2)拉出每个"行",然后能够解析每一行

分隔符之间的值(| COL-DELIM |和| ROW-DELIM |)可以是任何值(不仅仅是字符串,数字等等).

((.)(\ | COL-DELIM\|)(.)(\ | COL-DELIM\|)(.*)(\ | ROW-DELIM\|))+

当然,这不适用于(.*)事物的b/c ......有什么建议吗?



1> paxdiablo..:

人们似乎没有得到这样的事实:他们不必使用RE(或SQL,但这是另一个问题:-)用于每个任务,特别是那些程序代码更清晰.

如果你限制自己使用RE,我认为这是缺乏远见.

我只需处理字符串,令牌,令牌,其中令牌是以下之一:

非分隔符.

列分隔符.

行分隔符.

从空列列表开始,然后提取(使用indexOf/substring stuff)直到第一个下一行/列分隔符,将该文本添加到列列表中.

如果分隔符是列,请继续.

如果分隔符是行,请检查列数并根据需要处理列表.

如果没有最终行分隔符且列列表非空,则格式无效.

对不起,如果你真的在使用RE方法,但我不认为这是必需的(甚至是可取的).

伪代码(仅第一次切割,可能略有错误)如下:

def processStr(s):
    if not s.endsWith ("|ROW-DELIM|"):
        error "Invalid format"
    columnList = []
    while not s.equals (""):
        nextRowDelim = s.indexOf ("|ROW-DELIM|")
        nextColDelim = s.indexOf ("|COL-DELIM|")
        if nextColDelim == NotFound:
            nextColDelim = nextRowDelim + 1
        nextDelim = minimumOf (nextRowDelim,nextColDelim)

        columnList.add (s.substring (0, nextDelim))
        s = s.substring (nextDelim)

        if nextDelim == nextRowDelim:
            s = s.substring (length ("|ROW-DELIM|"))
            processColumns (columnList)
            columnList = []
        else:
            s = s.substring (length ("|COL-DELIM|"))

您可以轻松添加代码以检查此代码中的正确列数,或者processColumns(),如果这是您的愿望.

推荐阅读
ifx0448363
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有