1
iyangyuan 2015-07-27 08:42:47 +08:00 via iPhone
我觉得这种问题更适合用数据结构去解决。可以定义一个数组来存放所有的值,然后再用一个散列表,散列表中的key是数组中的每一个值,散列表的value是数组值所对应的下标数组(因为值可能重复,所以是数组),这样既可以快速检索某个值,又可以保持值的顺序,如果插入删除操作较多,可以用链表代替数组。
|
2
msg7086 2015-07-27 09:11:41 +08:00
let me google that for you: http://stackoverflow.com/questions/6711567/how-to-use-python-regex-to-replace-using-captured-group
|
4
amaranthf 2015-07-27 09:37:25 +08:00
python正则匹配之后的group是通过match object对象的group()函数来获取的,比如
|
5
amaranthf 2015-07-27 09:42:11 +08:00
晕,不小心多按了个键
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-07-27 11:43:08 +08:00
你最好把你失败的正则表达式写上,这就跟code一样,拿嘴说不明白
|
7
henryon 2015-07-27 11:55:15 +08:00
source code/destination information. then we can help you.
|
8
vincenttone 2015-07-27 16:54:17 +08:00
re.compile(r'([^, :]),').findall('HAPPY: A,B,囧,5,6,7,d,e ')
楼主是这意思吗?前提是你后面的值里没有空格、逗号或者冒号。 |
9
vincenttone 2015-07-27 16:56:53 +08:00
re.compile(r'(?:[:\s,]{1}([^, :]))').findall('HAPPY: A,B,囧,5,6,7,d,e ')
漏了e |
10
vincenttone 2015-07-27 16:57:27 +08:00
说实话,不如直接切割后split了
|
11
imn1 2015-07-27 17:44:19 +08:00
正则要记住多用 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-07-28 07:05:06 +08:00
@soratadori 参照2楼的链接。我觉得已经说得很清楚了。
|
15
soratadori OP @msg7086 多谢,已解决
|
16
PythonAnswer 2015-07-29 10:41:25 +08:00
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')]) |