找回密码
 加入
搜索
查看: 2168|回复: 6

[效率算法] 正则匹配到的关键词如何统计为数量[已解决]

[复制链接]
发表于 2017-2-22 11:40:50 | 显示全部楼层 |阅读模式
本帖最后由 heroxianf 于 2017-2-24 11:03 编辑

示例:     ALSDKFJSJAALJDFLSJA;LFJDLSKJDGLKAJSD;LFJALDKSFJLAJSDFLKASJDFKAJDF

正则:     AL|S|F

要如何才能统计  AL、S、F到底有多少个呢?

在7楼
 楼主| 发表于 2017-2-22 12:04:00 | 显示全部楼层
自己想了一个方法,大家一起讨论讨论,要是能做成函数返回个什么也好啊。


#include <array.au3>

Local $a = "0", $b = "0", $c = "0"
Local $Txt = "ALSDKFJSJAALJDFLSJA;LFJDLSKJDGLKAJSD;LFJALDKSFJLAJSDFLKASJDFKAJDF"
Local $Exp = "AL|S|F"

Local $Array_Txt = StringRegExp($Txt, $Exp, 3)
Local $Array_Exp = StringSplit($Exp, "|")

For $i = 0 To UBound($Array_Txt) - 1
        If $Array_Txt[$i] = $Array_Exp[1] Then
                $a = $a + 1
        ElseIf $Array_Txt[$i] = $Array_Exp[2] Then
                $b = $b + 1
        ElseIf $Array_Txt[$i] = $Array_Exp[3] Then
                $c = $c + 1
        EndIf
Next
MsgBox(0, "", $Array_Exp[1] & ": " & $a & @CRLF _
& $Array_Exp[2] & ": " & $b & @CRLF _
& $Array_Exp[3] & ": " & $c)
发表于 2017-2-22 17:09:15 | 显示全部楼层
回复 2# heroxianf


    何必用for循环费那劲,这样可以不?
#include <array.au3>
Local $Txt = "ALSDKFJSJAALJDFLSJA;LFJDLSKJDGLKAJSD;LFJALDKSFJLAJSDFLKASJDFKAJDF"
$Array = StringRegExp($Txt, 'AL|S|F', 3)
$Array_AL = StringRegExp($Txt, 'AL', 3)
$Array_S = StringRegExp($Txt, 'S', 3)
$Array_F = StringRegExp($Txt, 'F', 3)
_ArrayDisplay($Array, 'AL:' & UBound($Array_AL) & '   ' & _
                'S:' & UBound($Array_S) & '   ' & _
                'F:' & UBound($Array_F))
 楼主| 发表于 2017-2-22 18:03:12 | 显示全部楼层
回复 3# haijie1223
发哥主要是考虑到正则增加关键词  结果也自动增加的问题


现在是: AL|S|F
我改成: AL|S|F|测试

我想让结果自动也添加上  “测试”  这个结果。
发表于 2017-2-22 20:01:34 | 显示全部楼层
加多少也是如此
 楼主| 发表于 2017-2-23 13:34:49 | 显示全部楼层
回复 5# haijie1223

发哥,我是希望这样输出的,关键词随意增加后都可以提现出来。检查一下哇。
   
#include <array.au3>
Local $Txt = "ALSDKFJSJAALJDFLSJA;LFJDLSKJDGLKAJSD;LFJALDKSFJLAJSDFLKASJDFKAJDF are you ok?"
Local $Exp = "AL|S|F|L|are" ;随意增加关键字
Local $Out = ""

Local $Array_Exp = StringSplit($Exp, "|")
Local $Array[UBound($Array_Exp)]

For $i = 1 To $Array_Exp[0]
        $Array[$i] = StringRegExp($Txt, $Array_Exp[$i], 3)
        $Out &= $Array_Exp[$i] & ": " & UBound($Array[$i]) & @CRLF ;合并结果
Next

MsgBox(0, "", $Out)
 楼主| 发表于 2017-2-23 13:42:06 | 显示全部楼层
回复 5# haijie1223


过滤掉关键词没有的~
   
#include <array.au3>
Local $Txt = "ALSDKFJSJAALJDFLSJA;LFJDLSKJDGLKAJSD;LFJALDKSFJLAJSDFLKASJDFKAJDF are you ok?"
Local $Exp = "AL|S|F|L|are|测试" ;随意增加关键字
Local $Out = ""

Local $Array_Exp = StringSplit($Exp, "|")
Local $Array[UBound($Array_Exp)]

For $i = 1 To $Array_Exp[0]
        $Array[$i] = StringRegExp($Txt, $Array_Exp[$i], 3)
        If UBound($Array[$i]) <> 0 Then ;过滤关键字是0的结果
        $Out &= $Array_Exp[$i] & ": " & UBound($Array[$i]) & @CRLF ;合并结果
        EndIf
Next

MsgBox(0, "", $Out)
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-11-22 05:30 , Processed in 0.077444 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表