我有一个看起来像以下三个例子的字符串:
1: Name = astring Some comments
2: Typ = one two thee Must be "sand", "mud" or "bedload"
3: RDW = 0.02 [ - ] Some comment about RDW
我首先拆分变量名称并休息,如下所示:
re.findall(r'\s*([a-zA-z0-9_]+)\s*=\s*(.*)', line)
然后我想将字符串的右边部分拆分为包含值的部分和包含注释的部分(如果有的话)。我想通过查看空格的数量来做到这一点。如果它超过4,那么我假设开始评论
关于如何做到这一点的任何想法?
我目前有
re.findall(r'(?:(\S+)\s{0,3})+', dataString)
但是,如果我使用字符串测试:
'aa aa23r234rf2134213^$&$%& bb'
然后它还会选择' bb'
答案 0 :(得分:1)
您可以在re.findall
使用单个正则表达式:
^\s*(\w+)\s*=\s*(.*?)(?:(?:\s{4,}|\[)(.*))?$
请参阅regex demo。
<强>详情:
^
- 字符串开头\s*
- 0+ whitespaces (\w+)
- 捕获组#1匹配1个或多个字母/数字/下划线\s*=\s*
- =
附有0 +空格(.*?)
- 捕获第2组匹配任何0+字符,尽可能少,直到第一个...... (?:(?:\s{4,}|\[)(.*))?
- 可选的组匹配
(?:\s{4,}|\[)
- 4个或更多空格或[
(.*)
- 捕获第3组匹配0+字符$
- 字符串的结尾。