
1 iyangyuan 2015 年 7 月 27 日 via iPhone 我觉得这种问题更适合用数据结构去解决。可以定义一个数组来存放所有的值,然后再用一个散列表,散列表中的key是数组中的每一个值,散列表的value是数组值所对应的下标数组(因为值可能重复,所以是数组),这样既可以快速检索某个值,又可以保持值的顺序,如果插入删除操作较多,可以用链表代替数组。 |
2 msg7086 2015 年 7 月 27 日 let me google that for you: http://stackoverflow.com/questions/6711567/how-to-use-python-regex-to-replace-using-captured-group |
4 amaranthf 2015 年 7 月 27 日 python正则匹配之后的group是通过match object对象的group()函数来获取的,比如 |
5 amaranthf &nsp; 2015 年 7 月 27 日 晕,不小心多按了个键 p=re.compile(r'12(.*)34(.*)') m=p.match('12abc34def') m.group(1)=='abc' m.group(2)=='def' m.start(1)==2 m.end(1)==5 |
6 slideclick 2015 年 7 月 27 日 你最好把你失败的正则表达式写上,这就跟code一样,拿嘴说不明白 |
7 henryon 2015 年 7 月 27 日 source code/destination information. then we can help you. |
8 vincenttone 2015 年 7 月 27 日 re.compile(r'([^, :]),').findall('HAPPY: A,B,,5,6,7,d,e ') 楼主是这意思吗?前提是你后面的值里没有空格、逗号或者冒号。 |
9 vincenttone 2015 年 7 月 27 日 re.compile(r'(?:[:\s,]{1}([^, :]))').findall('HAPPY: A,B,,5,6,7,d,e ') 漏了e |
10 vincenttone 2015 年 7 月 27 日 说实话,不如直接切割后split了 |
11 imn1 2015 年 7 月 27 日 正则要记住多用 r‘规则’ 因为没用 r 标记,所以\1 \2等被转义了(显示乱码) |
12 soratadori OP 多谢@imn1 @msg7086 ,正则表达式确实是因为 r' '的问题。但还是没成功,貌似"\1"这样的形式后面跟不了数字,code [r'\1\2'+'123456'] ,如果把123456更换成其他的东西就可以运行。 谢@iyangyuan 和 @iyangyuan 提醒,我后来试了下用列表来解决这个问题: L1 = ['key1','key2'……] L2 = ['A','B','','5','6','7','d','e'] 先查询L1里keyn的位置,再修改l2对应位置上的值,最后再输出L2回字符串是可行的。勉强算是解决这问题了。 但是感觉用列表来解决有点怪怪,我又试了下用字典来弄,代码如下: L1 = ['key1','key2'……] L2 = ['A','B','','5','6','7','d','e'] D1 = dict(zip(L1,L2)) 这样可以直接修改keyn的值(D1['keyn'] = ),而不用先查找keyn的位置再修改L2的值。但问题是,字典不会按照你设定的顺序(key1 key2……)排列-_-#,这样就没办法输出回字符串了。该怎么办? @iyangyuan 我对这块不是很熟悉,你说的是上面这个意思吗? |
13 soratadori OP 我正则表达式查找部分是写成这样的形式: r'(happy.*?:)((.*?,){n})(.*?)(,)((.*?,){m})(.*?)(,.*)',然后\4和\8部分为需要的内容 |
14 msg7086 2015 年 7 月 28 日 @soratadori 参照2楼的链接。我觉得已经说得很清楚了。 |
15 soratadori OP @msg7086 多谢,已解决 |
16 PythonAnswer 2015 年 7 月 29 日 In [1]: # 字典实现 import re from collections import OrderedDict In [2]: example = 'HAPPY: A,B,,5,6,7,d,e' In [3]: dict_values = re.sub(r'^.*\s*\:\s*', '', example).split(',') In [4]: dict_values Out[4]: ['A', 'B', '', '5', '6', '7', 'd', 'e'] In [5]: OrderedDict(zip(range(len(dict_values)), dict_values)) Out[5]: OrderedDict([(0, 'A'), (1, 'B'), (2, ''), (3, '5'), (4, '6'), (5, '7'), (6, 'd'), (7, 'e')]) |