Django自定义模板过滤器以突出显示文本块中的列

时间:2013-03-17 01:57:28

标签: regex django-templates

我正在使用{{my_list |。在HTML模板中呈现列表加入:“< \ 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',尽管如果正则表达式需要,我可以添加一个来帮助ID开始行。 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)

此致

2 个答案:

答案 0 :(得分:0)

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

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

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

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

答案 1 :(得分: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'.