1

我正在使用 {{ my_list | 在 HTML 模板中呈现列表 join:"<\br>"}} ,它显示为...

$GPGGA,062511,2816.8178,S,15322.3185,E,6,04,2.6,72.6,M,37.5,M,,*68
$GPGGA,062512,2816.8177,S,15322.3184,E,1,04,2.6,72.6,M,37.5,M,,*62
$GPGGA,062513,2816.8176,S,15322.3181,E,1,04,2.6,72.6,M,37.5,M,,*67
$GPGGA,062514,2816.8176,S,15322.3180,E,1,03,2.6,72.6,M,37.5,M,,*66
$GPGGA,062515,2816.8176,S,15322.3180,E,6,03,2.6,72.6,M,37.5,M,,*60

我正在尝试使用正则表达式在第 4 个和第 5 个逗号处插入 CSS,以便突出显示此列中的文本,但是我无法弄清楚执行此操作的表达式。实现这一点的其他方法也值得赞赏。

其他信息:

1) 每行以'\n'结尾。虽然这可以被删除并且 HTML 显示没有改变,但如果需要,我将它留给正则表达式使用。2) 在这个例子中,字符串并不总是有一个很好的标题,比如'$GPGGA',尽管如果正则表达式需要,我可以添加一个来帮助标识行的开头。3) 列可能不是本例中所示的统一字符数。

我正在处理的过滤器如下

@register.filter(is_safe=True)
def highight_start(text):
    return re.sub('regex to find 4th comma in each line', ",<span class='my_highlight'>", text, flags=re.MULTILINE)

@register.filter(is_safe=True)
def highight_end(text):
    return re.sub('regex to find 5th comma in each line', "</span>,", text, flags=re.MULTILINE)

问候

4

2 回答 2

0

您可以通过<span>第 5 个值替换为包含在标签 中的值本身来实现这一点。

正则表达式:^((?:[\w\d\.\$]+,){4})([\d\.]+)
替换:\1<span class='my_highlight'>\2</span>

在这里解释演示:http ://regex101.com/r/cX5iA0

注意:我假设第 5 个值是数字和点

于 2013-03-17T04:12:42.793 回答
0

感谢@ka,他让我在这个解决方案上步入正轨。我的工作过滤器使用:

expression = '^((?:[^,]+,){4})([^,]+)'
replace = r'\g<1><span class="my_highlight">\g<2></span>'

#[^,] also allows matching of hidden HTML tags in the text
#To get the groups to insert back into the text and not be overwritten, they need to be referenced as indicated in 'replace'.
于 2013-03-17T18:53:27.597 回答