如何使用python
替换以下内容GSA*HC*11177*NYSfH-EfC*23130303*0313*1*R*033330103298
STEM*333*3001*0030303238
BHAT*3319*33*33377*23330706*031829*RTRCP
NUM4*41*2*My Break Room Place*****6*1133337
我希望在第一次出现' *'之后更换所有字符。 。除了' *'
之外,所有字符都必须替换示例输入:
NUM4*41*2*My Break Room Place*****6*1133337
示例输出:
NUM4*11*1*11 11111 1111 11111*****1*1111111
答案 0 :(得分:2)
相当简单,使用回调来返回组1(如果匹配)不变,否则为
返回替换1
注意 - 这也适用于多行字符串
如果您需要,只需将(?m)
添加到正则表达式的开头即可。 (?m)(?:(^[^*]*\*)|[^*\s])
您可能希望首先测试*
字符的字符串。
( ^ [^*]* \* ) # (1), BOS/BOL up to first *
| # or,
[^*\s] # Not a * nor whitespace
Python
import re
def repl(m):
if ( m.group(1) ) : return m.group(1)
return "1"
str = 'NUM4*41*2*My Break Room Place*****6*1133337'
if ( str.find('*') ) :
newstr = re.sub(r'(^[^*]*\*)|[^*\s]', repl, str)
print newstr
else :
print '* not found in string'
输出
NUM4*11*1*11 11111 1111 11111*****1*1111111
答案 1 :(得分:1)
如果您想使用正则表达式,可以使用以下内容:(?<=\*)[^\*]+
re.sub
inputs = ['GSA*HC*11177*NYSfH-EfC*23130303*0313*1*R*033330103298',
'STEM*333*3001*0030303238',
'BHAT*3319*33*33377*23330706*031829*RTRCP',
'NUM4*41*2*My Break Room Place*****6*1133337']
outputs = [re.sub(r'(?<=\*)[^\*]+', '1', inputline) for inputline in inputs]
正则表达式解释here