我想从字符串中替换多个匹配项。
这是我的代码。
import configparser
config = configparser.RawConfigParser()
try:
with open(YourConfigFilePath) as f:
config.readfp(f)
except:
print("Config file Don't exist.")
# Check the config variable
print(config)
它取代文字但没有给出最好的结果
例如,如果测试为SpannableStringBuilder ss = new SpannableStringBuilder(str);
Pattern userNamePattern = Pattern.compile("\\[(.*?)\\]");
Matcher userNameMatcher = userNamePattern.matcher(ss);
while (userNameMatcher.find()) {
final int start = userNameMatcher.start();
final int end = userNameMatcher.end();
ss.setSpan(new ClickableSpan() {
final String clickString = str.substring(start,end);
@Override
public void onClick(View widget) { }
@Override
public void updateDrawState(TextPaint ds) {
super.updateDrawState(ds);
ds.setUnderlineText(false);
}
}, start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
ss.replace(start, end, str.substring(start+1,end-1));
}
,则结果为[A] b [cd] e
我想要的结果是A b [ccd
我怎样才能实现我在这里做错的事情。
答案 0 :(得分:1)
正如@pskink解释代码Here您可以使用类似这样的东西。我希望这个适合你。
SpannableStringBuilder ss = new SpannableStringBuilder(str);
Pattern userNamePattern = Pattern.compile("\\[(.*?)\\]");
Matcher userNameMatcher = userNamePattern.matcher(ss);
int delta = 0;
while (userNameMatcher.find()) {
final int start = userNameMatcher.start() - delta;
final int end = userNameMatcher.end() - delta;
ss.setSpan(new ClickableSpan() {
final String clickString = str.substring(start,end);
@Override
public void onClick(View widget) { }
@Override
public void updateDrawState(TextPaint ds) {
super.updateDrawState(ds);
ds.setUnderlineText(false);
}
}, start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
ss.delete(end - 1, end);
ss.delete(start, start + 1);
delta += 2;
}