正则表达式。。。求助

miforum 2010-10-12 10:08:03
现有,文本文档中的内容格式如下:

1、广州/深圳/珠海/佛山
2、www.baidu.com/abc/123/bcd/456.html
3、广州市天河北路,510000/深圳市福田区,5100003
4、【广东】广州天河区中山大道88号winte酒吧
5、www.Google.com/abc/123/bcd/456.html

想实现的效果是——替换后,文本文档中的内容变为:

1、广州;深圳;珠海;佛山
2、www.baidu.com/abc/123/bcd/456.html
3、广州市天河北路,510000
深圳市福田区,5100003
5、www.Google.com/abc/123/bcd/456.html


即:将中文与中文之间的“/”替换为“;”,数字与中文之间的“/”替换成换行且加2个空格。而英文与英文之间的“/”,英文与数字之间的“/”,数字与数字之间的“/”,数字与英文之间的“/”不替换。此外,凡事遇到“【汉字】”的,将此行文字全部删除,下面的一行顶上来(如果难度大的话,下面一行不顶上来也行)。

我每次取,都会取出一个中文字,没辙了。。正则确实有点头大。求大大帮忙~~~谢谢~最好能做成一个函数供调用。
...全文
165 28 打赏 收藏 转发到动态 举报
写回复
用AI写文章
28 条回复
切换为时间正序
请发表友善的回复…
发表回复
兔子-顾问 2010-10-13
  • 打赏
  • 举报
回复
写一个vb.net的方法,可以一行实现,不过我不指望你能看懂了。。。

Public Sub TestRegex03()
Dim s As String = "1、广州/深圳/珠海/佛山" + vbCrLf + "2、www.baidu.com/abc/123/bcd/456.html" + vbCrLf + "3、广州市天河北路,510000/深圳市福田区,5100003" + vbCrLf + "4、【广东】广州天河区中山大道88号winte酒吧" + vbCrLf + "5、www.Google.com/abc/123/bcd/456.html"
Dim result As String = Regex.Replace(s, "(?<=(?<ac>[\u4E00-\u9FA5])|(?<al>[a-zA-Z])|(?<ad>[0-9]))+(/)(?=(?<bc>[\u4E00-\u9FA5])|(?<bl>[a-zA-Z])|(?<bd>[0-9]))+|(?<remove>([\r\n]+|^)\s*[^\r\n]*?【[\u4E00-\u9FA5]+】[^\r\n]*([^\r\n]|$))", Function(m As Match) IIf(m.Groups("ac").Success And m.Groups("bc").Success, ";", IIf((m.Groups("ac").Success And m.Groups("bd").Success) Or (m.Groups("ad").Success And m.Groups("bc").Success), vbCrLf + " ", IIf(m.Groups("remove").Success, "", m.Value))))
Console.WriteLine(result)
End Sub


输出

1、广州;深圳;珠海;佛山
2、www.baidu.com/abc/123/bcd/456.html
3、广州市天河北路,510000
深圳市福田区,5100003
5、www.Google.com/abc/123/bcd/456.html
ZenRoi 2010-10-13
  • 打赏
  • 举报
回复

Sub GetNewTxt()
Dim oJs As Object, Str$

Set oJs = CreateObject("ScriptControl"): oJs.Language = "JScript"
oJs.eval "function gets(str){return str.replace(/(^|\s)\【\S+/g,'') " _
& ".replace(/(\d+)(\/)(?=[一-龥])/g,'$1 ') " _
& ".replace(/\/(?=[一-龥])/g,';')}"

Open App.Path & "\001.txt" For Input As #1
Str = Replace(Replace(StrConv(InputB(LOF(1), 1), vbUnicode), " ", "↑"), vbCrLf, " "): Reset
Str = Replace(oJs.codeobject.gets(Str), " ", vbCrLf)

Open App.Path & "\001.txt" For Output As #1
Print #1, Replace(Str, "↑", " "): Reset
End Sub

ZenRoi 2010-10-13
  • 打赏
  • 举报
回复
这个和空格转换成换行符有关,因为你之前的文本没有空格所以没有考虑这个因素。以后求助时,应该提供最接近自己真实意图的附件。
miforum 2010-10-13
  • 打赏
  • 举报
回复
十分感谢!!刚才那代码已经很好啦~~还有一点点问题,具体请见详述。

规范一下我的文档格式,以及“真正需求”。
原始文档格式如下:

PP 深圳地王大厦
AA 广州/深圳/珠海/佛山
WT www.baidu.com/abc/123/bcd/456.html
TU 广州市长大厦
AD 广州市天河北路,510000/深圳市福田区,5100003/东莞市樟木头镇,510000
XD west262.1 my name is
【广东】广州天河区中山大道88号winte酒吧
CE 广州耀中广场
QD www.Google.com/abc/123/bcd/456.html
AN 广州CBD2.0
XT 广州市环市东路378号

文档格式说明:除了以 【汉字】 开头的行之外,每一行最前面都有2个大写英文字母,然后空一格,紧接着是内容。

我要实现的效果是:

PP 深圳地王大厦
AA 广州;深圳;珠海;佛山
WT www.baidu.com/abc/123/bcd/456.html
TU 广州市长大厦
AD 广州市天河北路,510000
深圳市福田区,5100003
东莞市樟木头镇,510000
XD west262.1 my name is

CE 广州耀中广场
QD www.Google.com/abc/123/bcd/456.html
AN 广州CBD2.0
XT 广州市环市东路378号

即:
1、中文与中文之间的“/”替换为“;”
2、数字与中文之间的“/”替换成换行且加3个空格(为了对齐)
3、而英文与英文之间的“/”,英文与数字之间的“/”,数字与数字之间的“/”,数字与英文之间的“/”不替换。
4、英文句子不能被拆散(具体,请看下面您给我的15楼程序 执行效果)

您15楼给我的程序执行效果如下:

PP
深圳地王大厦
AA
广州;深圳;珠海;佛山
WT
www.baidu.com/abc/123/bcd/456.html
TU
广州市长大厦
AD
广州市天河北路,510000
深圳市福田区,5100003
东莞市樟木头镇,510000
XD
west262.1
my
name
is
【广东】广州天河区中山大道88号winte酒吧
CE
广州耀中广场
QD
www.Google.com/abc/123/bcd/456.html
AN
广州CBD2.0
XT
广州市环市东路378号



感谢热心回复!!感激不尽。。
ZenRoi 2010-10-13
  • 打赏
  • 举报
回复
希望是最终的代码:

Sub GetNewTxt()
Dim oJs As Object, Str$

Set oJs = CreateObject("ScriptControl"): oJs.Language = "JScript"
oJs.eval "function gets(str){return str.replace(/(^|\s)\S+?【\S+/g,'') " _
& ".replace(/(\d+)(\/)(?=[一-龥])/g,'$1 ') " _
& ".replace(/\/(?=[一-龥])/g,';')}"

Open App.Path & "\001.txt" For Input As #1
Str = Replace(StrConv(InputB(LOF(1), 1), vbUnicode), vbCrLf, " "): Reset
Str = Replace(oJs.codeobject.gets(Str), " ", vbCrLf)

Open App.Path & "\001.txt" For Output As #1
Print #1, Str: Reset
End Sub
ZenRoi 2010-10-13
  • 打赏
  • 举报
回复
“只要某一行文本是以【汉字】开头的,就将此行文字删掉。”
——这样说就又有问题了,你上面提供的示例并不是这样开头的,前面还有字符……
请规范你的要求。
ZenRoi 2010-10-13
  • 打赏
  • 举报
回复
最后写入002.txt是为了比对方便,楼主可以修改回相应文件名称。
miforum 2010-10-13
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 alzeng 的回复:]
看了十三楼你“真正想要的”,确认是否有【的行才删除?我之前是按不含/即删除的。
[/Quote]

感谢回复!

是的。就是说:只要某一行文本是以【汉字】开头的,就将此行文字删掉。

比如以下文本:

【地点】 大大3444的飒飒的撒
大事的搜索的

结果为:
大事的搜索的
ZenRoi 2010-10-13
  • 打赏
  • 举报
回复
已做修改:

Sub GetNewTxt()
Dim oJs As Object, Str$

Set oJs = CreateObject("ScriptControl"): oJs.Language = "JScript"
oJs.eval "function gets(str){return str.replace(/(^|\s)\S+【\S+/g,'') " _
& ".replace(/(\d+)(\/)(?=[一-龥])/g,'$1 ') " _
& ".replace(/\/(?=[一-龥])/g,';')}"

Open App.Path & "\001.txt" For Input As #1
Str = Replace(StrConv(InputB(LOF(1), 1), vbUnicode), vbCrLf, " "): Reset
Str = Replace(oJs.codeobject.gets(Str), " ", vbCrLf)

Open App.Path & "\002.txt" For Output As #1
Print #1, Str: Reset
End Sub

ZenRoi 2010-10-13
  • 打赏
  • 举报
回复
看了十三楼你“真正想要的”,确认是否有【的行才删除?我之前是按不含/即删除的。
ZenRoi 2010-10-13
  • 打赏
  • 举报
回复
关于自动换行:

Sub GetNewTxt()
Dim oJs As Object, Str$

Set oJs = CreateObject("ScriptControl"): oJs.Language = "JScript"
oJs.eval "function gets(str){return str.match(/(^|\s)\S+\/\S+/g,'').join('') " _
& ".replace(/(\d+)(\/)(?=[一-龥])/g,'$1 ') " _
& ".replace(/\/(?=[一-龥])/g,';')}"

Open App.Path & "\001.txt" For Input As #1
Str = Replace(StrConv(InputB(LOF(1), 1), vbUnicode), vbCrLf, " "): Reset
Str = Replace(oJs.codeobject.gets(Str), " ", vbCrLf)

Open App.Path & "\002.txt" For Output As #1
Print #1, Str: Reset
End Sub
miforum 2010-10-13
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 alzeng 的回复:]
第三行换行,第一行不换行,判断的依据是什么?
[/Quote]
我是想判断:遇到 【数字与中文之间的“/”】,就换行,同时加2个空格在前面。比如下面这行文本:

3、广州市天河北路,510000/深圳市福田区,5100003/东莞市樟木头镇,510000

遇到 【数字与中文之间的“/”】时,就换行,同时后面文本再加2个空格,结果如下:

3、广州市天河北路,510000
深圳市福田区,5100003
东莞市樟木头镇,510000

========================================================

此外,能否帮我看一下 下面的问题:
========================================================
我运行您给我的这段程序之后,会我文本文档中的其他内容删除。比如,我原先文本是:

深圳地王大厦
1、广州/深圳/珠海/佛山
2、www.baidu.com/abc/123/bcd/456.html
广州市长大厦
3、广州市天河北路,510000/深圳市福田区,5100003/东莞市樟木头镇,510000
west262.1
4、【广东】广州天河区中山大道88号winte酒吧
广州耀中广场
5、www.Google.com/abc/123/bcd/456.html
广州CBD2.0
广州市环市东路378号

运行程序后的结果是:


1、广州;深圳;珠海;佛山

2、www.baidu.com/abc/123/bcd/456.html

3、广州市天河北路,510000;深圳市福田区,5100003;东莞市樟木头镇,510000

5、www.Google.com/abc/123/bcd/456.html


把文本中的其他内容删掉了。而我真正想要的是:

深圳地王大厦
1、广州;深圳;珠海;佛山
2、www.baidu.com/abc/123/bcd/456.html
广州市长大厦
3、广州市天河北路,510000
深圳市福田区,5100003
东莞市樟木头镇,510000
west262.1

广州耀中广场
5、www.Google.com/abc/123/bcd/456.html
广州CBD2.0
广州市环市东路378号

再次感谢回复!
ZenRoi 2010-10-13
  • 打赏
  • 举报
回复
第三行换行,第一行不换行,判断的依据是什么?
miforum 2010-10-13
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 miforum 的回复:]
引用 6 楼 alzeng 的回复:
路径和文件名请自行修改:

VB code

Sub GetNewTxt()
Dim oJs As Object, Str$

Set oJs = CreateObject("ScriptControl"): oJs.Language = "JScript"
oJs.eval "function gets(str){return str.ma……
[/Quote]

貌似可以了。但是第三行的没有换行。麻烦再帮我看看,多谢!
miforum 2010-10-13
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 jhone99 的回复:]
中文与中文之间的“/”
******************
(?<=[\u4e00-\u9fa5])/(?=[\u4e00-\u9fa5])
[/Quote]
1L大哥。vb中的正则似乎不能用 问号。

程序提示:方法IregExp2失败
miforum 2010-10-13
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 alzeng 的回复:]
路径和文件名请自行修改:

VB code

Sub GetNewTxt()
Dim oJs As Object, Str$

Set oJs = CreateObject("ScriptControl"): oJs.Language = "JScript"
oJs.eval "function gets(str){return str.match(/(^|……
[/Quote]

6L大哥,运行有问题,没有改变文本。。应该是这里的乱码“一-龥”出了问题?
rimtd0314 2010-10-13
  • 打赏
  • 举报
回复
犀利,,,,
liaoyukun111 2010-10-13
  • 打赏
  • 举报
回复
学习.
ZenRoi 2010-10-13
  • 打赏
  • 举报
回复
路径和文件名请自行修改:

Sub GetNewTxt()
Dim oJs As Object, Str$

Set oJs = CreateObject("ScriptControl"): oJs.Language = "JScript"
oJs.eval "function gets(str){return str.match(/(^|\s)\S+\/\S+/g,'').join(' ').replace(/\/(?=[一-龥])/g,';')}"

Open App.Path & "\001.txt" For Input As #1
Str = Replace(StrConv(InputB(LOF(1), 1), vbUnicode), vbCrLf, " "): Reset
Str = Replace(oJs.codeobject.gets(Str), " ", vbCrLf)

Open App.Path & "\001.txt" For Output As #1
Print #1, Str: Reset
End Sub
miforum 2010-10-13
  • 打赏
  • 举报
回复
不厌其烦帮忙,真的非常感谢!!!!!!结贴!
加载更多回复(7)
自己做网站的大致流程 一、 进入网站 (1) 注册 注册需要的信息: 用户名、常用的邮箱、密码、请再次输入密码 应实现的效果 :焦点离开编辑框就做验证 a、是否满足输入的格式(用正则表达式)b、注册的用户和邮箱是否已注册 c、在我要注册中同时也要做以上验证 d、两次输入的密码要一致 注册完了注意页面的切换 (2) 登陆 登陆需要的信息: 利用有户名或邮箱登陆 登录密码 应实现的效果:离开及判断数据库中用户是否存在 , 在登录中判断用户对应的密码是否正确 不正确弹出信息 应有密码找回超连接,进入个人空间 (对自己个人信息完善、已经发布的信息修改和完善) (3)个人信息完善 需要信息(有户名 ) 性别 生日(年月日) 居住地(省份城市) 个人手机号 QQ号 家庭座机 二、 个人对网站的一些功能 (1) 发布求助信息 A、只有个人资料填写比肩完善的用户才可以求助 在一周内允许发的发求助信息份数 B、快速发布 (减少点的次数) 一些信息不用再添直接读取 C、需要一个求助车用来自己要求助的可以先存入两外一数据库 D、考虑用在线文本编辑方式 传图片 E、求助物品分类用别人的 F、有一个信息查看功能,确认后才提交 三、 个人主页 显示个人资料 、便于管理 四、 网站首页 应做到提取一题目 和部分内容

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧