我想在**之间加粗文本。我尝试了以下代码,但没有成功。它以粗体显示整个文本。
原始字符串:**嗨**,我的名字是** XYZ **,带有** PQR **“
想要的输出:嗨,我的名字是 XYZ ,带有 PQR
这是我尝试过的。
scale_x_continuous(
breaks = .$xpos %>% unique(),
labels = .$Group %>% unique(),
...
)
答案 0 :(得分:1)
您的正则表达式模式正在使用*
符号而没有转义。因此,它被视为量词,而不是要匹配的字符。修复表达式应可使其余代码按预期工作。要测试模式,您可以使用regex101.com
虽然我还没有对此进行广泛的测试,但是以下模式是满足您需求的基本模式:(\*\*)(.*?)(\*\*)
这使您可以匹配子字符串“ ** Hi **”,“ ** XYZ **”和“ ** PQR **”。您的代码当前将它们全部加粗。您可能想要做的是删除星号,并以粗体插入中间文本。
按照我的模式,您的文本应作为第二个匹配的组可用。因此,您可以从中提取索引以应用跨度,并从中删除所有**
个实例。在String和regex类中都应该有可以用于此目的的方法。
根据您的确切需求,您将有不同的约束条件和特殊情况,例如在中间文本为空的情况下如何处理“ ****”。
答案 1 :(得分:1)
请使用此代码解决上述问题
private SpannableStringBuilder getActivityText(String message) {
Pattern p = Pattern.compile("(\\*\\*)(.*?)(\\*\\*)");
Matcher matcher = p.matcher(message);
SpannableStringBuilder spannable = new SpannableStringBuilder(message);
List<StyleSpan> spans = new ArrayList<>();
//for making text bold
while (matcher.find()) {
StyleSpan span = new StyleSpan(Typeface.BOLD);
spannable.setSpan(span, matcher.start(), matcher.end(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
spans.add(span);
}
//for removing ** text
for (StyleSpan span : spans) {
spannable.replace(spannable.getSpanStart(span), spannable.getSpanStart(span) + 2, "");
spannable.replace(spannable.getSpanEnd(span) - 2, spannable.getSpanEnd(span), "");
}
return spannable;
}