首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >计算特定标记/单词之间的字符数

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

Stack Overflow用户
提问于 2014-07-22 09:49:05
回答 3查看 320关注 0票数 1

我有一个excel文件,其字符串不能超过60个字符。有些字符串受<br>的限制,而另一些则使用<break>。举个例子,我有一个细胞:

代码语言:javascript
运行
复制
    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个字符的标签之间的字符串,有什么“简单”的方法吗?

谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-07-23 10:01:19

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

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

代码语言:javascript
运行
复制
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++,但我想这个正则表达式也是一样的

票数 1
EN

Stack Overflow用户

发布于 2014-07-22 13:25:05

在Excel中,您可以尝试以下一些VBA代码:

代码语言:javascript
运行
复制
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旁边的列中。

票数 0
EN

Stack Overflow用户

发布于 2014-07-22 13:34:09

For Notepad++恐怕我找不到一种否定符号组合的方法。你不能用:

代码语言:javascript
运行
复制
^(<br>|<break>)

所以我能想到的第二件事就是做这样的事:

代码语言:javascript
运行
复制
.{60}(<br>|<break>)

但是,这只会突出显示这一行,如果它最终以br/break结尾,但在中断之前它还有60个其他字符。如果在结尾没有中断,则行将不会突出显示。

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

代码语言:javascript
运行
复制
.{60}(<br>|<break>|\n)

要突出显示只需点击Ctrl+F,切换到Mark选项卡,将搜索模式设置为Regex并点击Mark (不要忘记清除以前的标记)

这是我在Notepad++中能想到的最好的选择,而且它只需要很少的努力。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24884070

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档