如何找到以分号分隔的值?

时间:2009-03-02 13:22:55

标签: regex scripting

我在MS Outlook中收到的电子邮件中列出了我从“收件人”字段中复制的所有电子邮件ID。这些值(电子邮件ID)由分号分隔。我已将这个大的电子邮件ID列表复制到Excel中。现在我想在此列表中找到电子邮件ID的数量;基本上通过计算半冒号的数量。

我能做到这一点的一种方法是编写C代码。即将大列表存储为字符串缓冲区,并将字符串比较为“;”在while(char == ';') loop中。 但我想快点做。

有没有快速的方法可以找到它:

1。)正则表达式(我使用powergrep处理正则表达式)

2.。)在excel本身(任何excel宏/插件?)

3.)DOS脚本方法

4.。)还有其他任何快速的方法吗?

10 个答案:

答案 0 :(得分:7)

我相信以下内容应该适用于Excel:

= Len(A1) - Len(Substitute(A1, ";", "")) + 1

/编辑:如果您已将电子邮件地址粘贴到多个单元格上,则可以使用以下函数对单元格进行计数:

= CountA(A1:BY1)

CountA计算给定范围内的非空单元格。您可以通过在单元格中键入 =CountA( ,然后使用鼠标光标选择单元格区域来指定范围。

答案 1 :(得分:2)

如果计算分号的数量对你来说足够好,你可以使用这个解决方案在Perl中完成:Perl FAQ 4.24: How can I count the number of occurrences of a substring within a string

答案 2 :(得分:2)

Bash / Cygwin One-Liner

$ echo "user@domain.tld;user@domain.tld;user@domain.tld" | sed -e 's/;/\n/g' | wc -l
3

如果你已经安装了Cygwin,它实际上是即时的。如果没有,cygwin值得安装恕我直言。它基本上提供了覆盖Windows系统的Linux bash提示。

顺便说一句,像这样的东西是我喜欢* nix而不是Windows的工作原因,因为bash脚本比批处理脚本强大得多,所以我不能生活在没有Cygwin的Windows机器上。

答案 3 :(得分:2)

的PowerShell:

> $a = 'blah;blah;blah'
> $a.Split(';').Count  
3

答案 4 :(得分:2)

3)如果你既没有cygwin,也没有安装powershell,试试这个.cmd

@echo off
set /a i = 0
for %%i in (name1@mail.com;name2@mail.com;name3@mail.com) do set /a i = i + 1
@echo %i%

答案 5 :(得分:1)

如果您使用的是Excel,则可以使用此代码并公开它。

Public Function CountSubString(ByVal RHS As String, ByVal Delimiter As String) As Integer
    Dim V As Variant
    V = Split(RHS, Delimiter)
    CountSubString = UBound(V) + 1
End Function

如果您有.NET,可以创建一个小命令行实用程序

Module CountSubString

    Public Sub Main(ByVal Args() As String)

        If Args.Length <> 2 Then
            Console.WriteLine("wrong arguments passed->")
        Else
            Dim I As Integer = 0
            Dim Items() = Split(Args(0), Args(1))
            Console.WriteLine("There are " & CStr(UBound(Items) + 1) & " 
        End If

    End Sub
End Module

答案 6 :(得分:1)

将列表加载到您最喜欢的(不是记事本!)编辑器中,替换;通过\ n,在状态栏中查看您有多少行,如果需要,删除最后一行。

答案 7 :(得分:1)

使用LINQ的C#3.0如果它可以替代C

,那么这将很容易

myString.ToCharArray()。Count(char =&gt; char =';')

答案 8 :(得分:1)

如果是awk,echo是可以使用的(和it is, even on windows):

echo "addr1;addr2;addr3...." | awk -F ";" "{print NF}"

答案 9 :(得分:0)

用while循环遍历它并计算';'可能会是最快,最可读的。

考虑Konrad的建议,它也将循环遍历字符串并检查每个字符并查看它是否是一个simicolon,然后修改字符串(可能是也可能不是可变的,我不知道使用excel),以及然后它计算它与原始字符串之间的长度。