例如,如果我有:
"+----+----+---+---+--+"
可以从第二个到第四个+
替换为-
吗?
如果我有
"+----+----+---+---+--+"
我希望
"+-----------------+--+"
我必须从第2个+
替换为-
到self.model.set('pristineMethod', { pristineMethod : utils.cloneDeep(self.model.get())} );
。是否有可能通过正则表达式实现这一目标?怎么样?
答案 0 :(得分:5)
如果您认为第一个字符始终为+
:
string = '+' + re.sub(r'\+', r'-', string[1:], count=3)
删掉字符串的第一个字符,然后sub()
前三个+
字符,然后重新添加初始+
。
如果您不能假设第一个+
是字符串的第一个字符,请先找到它:
prefix = string.index('+') + 1
string = string[:prefix] + re.sub(r'\+', r'-', string[prefix:], count=3)
答案 1 :(得分:2)
我宁愿迭代字符串,然后根据我发现的内容替换字符串。
secondIndex = 0
fourthIndex = 0
count = 0
for i, c in enumerate(string):
if c == '+':
count += 1
if count == 2 and secondIndex == 0:
secondIndex = i
elif count == 4 and fourthIndex == 0:
fourthIndex = i
string = string[:secondIndex] + '-'*(fourthIndex-secondIndex+1) + string[fourthIndex+1:]
测试:
+----+----+---+---+--+
+-----------------+--+
答案 2 :(得分:2)
我将字符串拆分为一个字符串数组,使用要替换的字符作为分隔符。
然后使用所需的分隔符分段重新加入数组。
example_str="+----+----+---+---+--+"
swap_char="+"
repl_char='-'
ith_match=2
jth_match=4
list_of_strings = example_str.split(swap_char)
new_string = ( swap_char.join(list_of_strings[0:ith_match]) + repl_char +
repl_char.join(list_of_strings[ith_match:jth_match]) +
swap_char + swap_char.join(list_of_strings[jth_match:]) )
print (example_str)
print (new_string)
运行它给出:
$ python ./python_example.py
+----+----+---+---+--+
+-------------+---+--+
答案 3 :(得分:2)
正则表达式?是的,这是可能的。
^(\+-+){1}((?:\+[^+]+){3})
<强>解释强>:
^
(\+-+){1} # read + and some -'s until 2nd +
( # group 2 start
(?:\+[^+]+){3} # read +, followed by non-plus'es, in total 3 times
) # group 2 end
<强>测试强>:
$ cat test.py
import re
pattern = r"^(\+-+){1}((?:\+[^+]+){3})"
tests = ["+----+----+---+---+--+"]
for test in tests:
m = re.search(pattern, test)
if m:
print (test[0:m.start(2)] +
"-" * (m.end(2) - m.start(2)) +
test[m.end(2):])
调整很简单:
^(\+-+){1}((?:\+[^+]+){3})
^ ^
运行:
$ python test.py
+-----------------+--+
答案 4 :(得分:1)
仅使用理解列表:
s1="+----+----+---+---+--+"
indexes = [i for i,x in enumerate(s1) if x=='+'][1:4]
s2 = ''.join([e if i not in indexes else '-' for i,e in enumerate(s1)])
print(s2)
+-----------------+--+
我看到你已经找到了一个解决方案,但我不喜欢正则表达式,所以也许这会有助于另一个! : - )
答案 5 :(得分:1)
这是pythonic。
import re
s = "+----+----+---+---+--+"
idx = [ i.start() for i in re.finditer('\+', s) ][1:-2]
''.join([ j if i not in idx else '-' for i,j in enumerate(s) ])
但是,如果你的字符串是常量并希望它简单
print (s)
print ('+' + re.sub('\+---', '----', s)[1:])
输出:
+----+----+---+---+--+
+-----------------+--+