如何使字符串在数字之间包含':',只避免任何字符 java 之前或之后的':'?



我想用SpannableStringjava突出显示一个字符串

我有以下字符串

textString = "2021-01-26 19:23:18 Lat: 26.369919 Long: 83.46433";

由此,我可以使用正则表达式突出显示这个中的字符串

Pattern regex = Pattern.compile("(\d+(?:\.\d+)?)");

像这个

text字符串=">2021-01-26192318纬度:26.369919Long:83.46433";;

但现在我想让s字符串也包括数字之间的":",并希望避免在任何非数字字符之前或之后使用":">

我想产生这样的输出

text字符串=">2021-01-2619:23:18纬度:26.369919经度:83.46433";;

只需将:包含在可选非捕获组内的角色类中,并使非捕获组匹配0次或更多次:

\d+(?:[:.]\d+)*

RegEx演示

替换为:

"<b>$0</b>"

注意,这将匹配具有多个点的数字,如83.46433.135

如果你想消除这种情况,那么使用:

\d+(?:\.\d+|(?::\d+)+)?

RegEx Demo 2

您可以在这里使用Html#fromHtml来实现一种相当简单的方法:

String textString = "2021-01-26 19:23:18 Lat: 26.369919 Long: 83.46433";
textString = textString.replaceAll("(\d{4})-(\d{2})-(\d{2}) (\d{2}:\d{2}:\d{2})", "<b>$1</b>-<b>$2</b>-<b>$3</b> <b>$4</b>");
textString = textString.replaceAll("(?<!\S)(\d+(?:\.\d+)?)(?!\S)", "<b>$1</b>");
textView.setText(Html.fromHtml(textString));

如果在regex替换后记录textString的值,您将看到以下值:

<b>2021</b>-<b>01</b>-<b>26</b> <b>19:23:18</b> Lat: <b>26.369919</b> Long: <b>83.46433</b>

相关内容

最新更新