计算特定标签/单词之间的字符数

时间:2014-07-22 09:49:06

标签: regex excel notepad++

我有一个excel文件,其字符串不能超过60个字符。某些字符串受<br>限制,而其他字符串则使用<break>。例如,我有这个单元格:

    Lorem ipsum dolor sit amet, consectetur adipiscing elit.<br> Lorem 
    ipsum dolor sit amet, consectetur adipiscing elit. Aliquam amet.<br>Lorem ipsum dolor 
    sit amet, consectetur adipiscing elit. Nulla eu sed.<break>Lorem ipsum dolor sit 
    amet, consectetur adipiscing elit.<br>

我想要excel或Notepad ++来突出显示超过60个字符的标签之间的字符串,是否有任何&#34; easy&#34;这样做的方法?

谢谢!

3 个答案:

答案 0 :(得分:0)

在Excel中,您可以尝试这个小VBA代码:

Private Sub CommandButton1_Click() Dim search_area As String search_area = "B3:B8" Dim separator As String separator = "<br>" Dim lengthLimit As Long lengthLimit = 60 Dim text As Variant Dim i As Long Dim col As Long Dim row As Long For Each cell In ActiveSheet.range(search_area).Cells row = cell.row col = cell.Column + 1 text = Split(cell, separator, -1) For i = 0 To UBound(text) If (Len(text(i)) > lengthLimit) Then ActiveSheet.Cells(row, col) = text(i) col = col + 1 End If Next Next End Sub

请参阅此录制内容,了解如何将其与Excel集成 https://dl.dropboxusercontent.com/spa/ymse6uo5hhtvqry/vba.gif

  • 按Alt + F11进入VBA模式。
  • 然后插入UserForm并添加一个按钮。
  • 双击按钮并粘贴上面的代码。
  • 现在,按“播放”按钮。单击按钮。

假设长文本在B3:B8范围内,如果在
标签内有超过60个字符,那么该文本将显示在B列旁边的列中。

答案 1 :(得分:0)

对于Notepad ++ 我恐怕无法找到否定符号组合的方法。你不能使用:

^(<br>|<break>)

所以我能想到的最好的事情就是做这样的事情:

.{60}(<br>|<break>)

然而,如果它最终以br / break结束,但在中断前有60个其他字符,则只会突出显示该行。如果最后没有中断,则该行不会突出显示。

你也可以检查\ n这是否足够好:

.{60}(<br>|<break>|\n)

要突出显示只需按Ctrl + F,请切换到标记选项卡,将搜索模式设置为正则表达式并点击全部标记(不要忘记清除以前的标记)

这是我用Notepad ++可以想到的最佳选择,而且只需要很少的努力。

答案 2 :(得分:0)

由于您使用正则表达式 excel 对其进行了标记,因此这是一个使用正则表达式突出显示单元格中长短语的VBA宏。我假设你上面的例子都在一个单元格中。每个超过60个字符的子字符串将突出显示(交替)红色或绿色。宏在选择的单元格上运行。它可以修改为在其他范围内运行。

编辑 代码更改为仅突出显示标记之间字符串的部分。在突出显示起始标记之前

Option Explicit
Sub HiglightGT60()
    Dim S As String
    Dim R As Range, C As Range
    Dim RE As Object, MC As Object, M As Object
    Const MaxLen As Long = 60
    Dim bColorFlag As Boolean

Set R = Selection
Set RE = CreateObject("vbscript.regexp")
    With RE
        .Global = True
        .Pattern = "(^|<br>|<break>)((?!<br>|<break>)[\s\S]){" & MaxLen + 1 & ",}"
        .MultiLine = False
    End With

For Each C In R
    C.Font.Color = vbBlack
    S = C.Text
    If RE.test(S) = True Then
        Set MC = RE.Execute(S)
        For Each M In MC
            C.Characters(M.firstindex + 1 + Len(M.submatches(0)), _
                            M.Length - Len(M.submatches(0))) _
                            .Font.Color = IIf(bColorFlag, vbRed, vbGreen)
            bColorFlag = Not bColorFlag
        Next M
    End If
Next C

End Sub

我不知道 Notepad ++ ,但我认为正则表达式类似

相关问题