以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- 求正则表达式 (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=130283) |
||||
-- 作者:utcxray -- 发布时间:2019/1/17 21:46:00 -- 求正则表达式 例子 A:压力电动门 规则:1、只测试中文 2、按中文规则,所有字符按从左到右顺序。 3、要求取出A在另外一个字符窜的符合度。 4、如A的总长度为5,则在另外一个字符中出现的情况如下 B:一种压力电磁阀的改进 A有连续3个字符与B相符 相似度:3/5 C:一种电动摩托车 A有连续2个字符与C相符 相似度:2/5 D:一种流体阀门的测量装置 A有连续1个字符与D相符 相似度:1/5 E:一种压力电动效应 A有连续4个字符与E相符 相似度:4/5 F:一种压力电动门的改进 A有连续5个字符与F相符 相似度:5/5 问题: 给个正则表达式 要求:A是表“”求购“”中字段“”求购要求“”内容,从B到F是同表中“”出售“”字段内容,则按上述例子给个正则表达式 |
||||
-- 作者:utcxray -- 发布时间:2019/1/17 22:01:00 -- 自己顶 |
||||
-- 作者:utcxray -- 发布时间:2019/1/17 22:07:00 -- 自己顶,刚学正则,这是可能用到的 匹配中文字符的正则表达式: [\\u4e00-\\u9fa5] 或许你也需要匹配双字节字符,中文也是双字节的字符 匹配双字节字符(包括汉字在内):[^\\x00-\\xff] 注:可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1) 更多常用正则表达式匹配规则: 英文字母:[a-zA-Z] 数字:[0-9] 匹配中文,英文字母和数字及_: //code from http://caibaojian.com/zhongwen-regexp.html ^[\\u4e00-\\u9fa5_a-zA-Z0-9]+$ 同时判断输入长度:· [\\u4e00-\\u9fa5_a-zA-Z0-9_]{4,10} ^[\\w\\u4E00-\\u9FA5\\uF900-\\uFA2D]*$ 1、一个正则表达式,只含有汉字、数字、字母、下划线不能以下划线开头和结尾: ^(?!_)(?!.*?_$)[a-zA-Z0-9_\\u4e00-\\u9fa5]+$ 其中: ^ 与字符串开始的地方匹配 (?!_) 不能以_开头 (?!.*?_$) 不能以_结尾 [a-zA-Z0-9_\\u4e00-\\u9fa5]+ 至少一个汉字、数字、字母、下划线 $ 与字符串结束的地方匹配 放在程序里前面加@,否则需要\\\\进行转义 @"^(?!_)(?!.*?_$)[a-zA-Z0-9_\\u4e00-\\u9fa5]+$" (或者:@"^(?!_)\\w*(?<!_)$" 或者 @" ^[\\u4E00-\\u9FA50-9a-zA-Z_]+$ " ) 2、只含有汉字、数字、字母、下划线,下划线位置不限: ^[a-zA-Z0-9_\\u4e00-\\u9fa5]+$ |
||||
-- 作者:有点甜 -- 发布时间:2019/1/17 22:15:00 -- 参考
Dim s1 As String = "5号循环水泵" msgbox(count) |
||||
-- 作者:utcxray -- 发布时间:2019/1/21 16:31:00 -- 代码没反应???? Dim S1 As List(Of String) ‘定义集合 Dim S2 As List(Of String) ‘定义集合 S1 = DataTables("专利交易库").GetValues("专利名称") ‘取出专利交易库中专利名称 S2= DataTables("专利交易库").GetValues("交易要求") ‘取出专利交易库中交易要求 Dim count As Integer = 0 ‘定义循环变量’ For Each s As String In s1 ‘再取出专利名称集合中的每一项’ For Each s11 As String In s 再取出专利名称集合中每一项的每个字符 For Each s21 As String In s2 再取出交易要求集合中每一项的每个字符 If s21.Contains(s11) = True Then ‘按字符逐个比较专利要求余专利名称的符合度’ count += 1 ‘找到相符字符,变量加1’ Output.Show(s11) msgbox(count) msgbox(count/s21.length) End If Next Next Next 问题:红色字体部分代码的运行原理:是代码注释的意思吗?我希望是逐个字符匹配,如果匹配了一个字符,继续,比如A“我们合同大学”和B”我是学生的门卫“,这两个字符的比较,我希望从左到右开始,先比较“我“,A,B开始都是“我”,则按A为准则,“我”的后面是“我们“,在包含“我“”的基础上,继续比较“”我们“,此段代码在实际运行中结果不是我想要的,请问还能有其他办法吗?正则刚开始学
[此贴子已经被作者于2019/1/21 16:36:37编辑过]
|
||||
-- 作者:utcxray -- 发布时间:2019/1/21 16:44:00 -- 有点甜,在吗? |
||||
-- 作者:有点蓝 -- 发布时间:2019/1/21 17:28:00 -- 1、正则应该是处理不来的。 2、下面的方法比较笨拙,效率不高: Dim s1 As String = "5号循环水泵" Dim s2 As String = "6号循环水的泵" If s2.Contains(s1) Then msgbox("完全匹配") Return "" End If Dim count As Integer = s1.Length For i As Integer = count -1 To 1 Step -1 For j As Integer = count - i To 0 Step -1 Dim s As String = s1.SubString(j,i) If s2.Contains(s) Then msgbox("匹配" & i & "个") Return "" End If Next Next 3、最好的是使用AI,不过还没有研究,不会用
|
||||
-- 作者:utcxray -- 发布时间:2019/1/22 15:19:00 -- 有点甜,在吗?能把你在楼上的帖子逻辑结合我的代码做个例子吗?循环转不出来了。目的:对于“专利交易库“中“交易要求”,“专利名称”做匹配 [此贴子已经被作者于2019/1/22 15:21:20编辑过]
|
||||
-- 作者:有点甜 -- 发布时间:2019/1/22 15:45:00 -- 以下是引用utcxray在2019/1/22 15:19:00的发言:
有点甜,在吗?能把你在楼上的帖子逻辑结合我的代码做个例子吗?循环转不出来了。目的:对于“专利交易库“中“交易要求”,“专利名称”做匹配 [此贴子已经被作者于2019/1/22 15:21:20编辑过]
具体实例上传上来测试。 |
||||
-- 作者:utcxray -- 发布时间:2019/1/22 16:46:00 -- 实例。怎么传不上啊
[此贴子已经被作者于2019/1/22 17:02:32编辑过]
|