求vb寻找双引号正则表达式或者其他算法

WLWW 2008-08-07 04:06:11
读*.c等类似文件,文件里要求替换双引号之间的内容,但是注释里面双引号之间的内容不能替换,(也有可能有多行注释的),求正则表达式或者相关算法,找到不在注释里的双引号,并替换成其他内容。谢谢各位
...全文
286 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
WLWW 2008-08-21
  • 打赏
  • 举报
回复
无满意答案,自己已经解决了,谢谢
WLWW 2008-08-08
  • 打赏
  • 举报
回复
有可能阿,所以我找比较好的算法或者表达式,有过经验的大哥提供方法阿
lsftest 2008-08-08
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 WLWW 的回复:]
如果/*、*/ 中有/* //或者 //中有 /**/比较麻烦哎
[/Quote]
但那些都不会出现在行首位置吧。
WLWW 2008-08-08
  • 打赏
  • 举报
回复
如果/*、*/ 中有/* //或者 //中有 /**/比较麻烦哎
lsftest 2008-08-08
  • 打赏
  • 举报
回复
不用每个字符都读,你搜寻/*、*/,把它们及它们之间的内容及开始的行号保存起来,//也是一样处理,保存好后删掉,进行你的替换,然后按照刚才的反顺序插回那些注释。
WLWW 2008-08-08
  • 打赏
  • 举报
回复
嗬嗬,那就是每个字符要去读了,这个算法比较笨,速度也比较慢,这个我会写的,但是感觉上效率差了
lsftest 2008-08-08
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 WLWW 的回复:]
多行注释/*
*/

和单行注释//
里面引号不用替换的,
其他一切引号里面的都要替换。
小弟不懂正则,希望高手给指教,不是正则也没关系,希望有相关算法,谢谢
[/Quote]
如果这样,可以先用变量保存好多行注释及单行注释的内容及行号,然后把它们都删掉,进行你想做的字符串替换,最后再把多行注释及单行注释插入到它们原本的位置.
WLWW 2008-08-08
  • 打赏
  • 举报
回复
多行注释/*
*/

和单行注释//
里面引号不用替换的,
其他一切引号里面的都要替换。
小弟不懂正则,希望高手给指教,不是正则也没关系,希望有相关算法,谢谢
lsftest 2008-08-08
  • 打赏
  • 举报
回复
这样?
myRegExp.Pattern = "=""(.*?)"""
WLWW 2008-08-08
  • 打赏
  • 举报
回复
文件for example:
#define IS_LEAP_YEAR(year) ( (year & 3) == 0 )

/*
* Pointer to a saved copy of the TZ value obtained in the previous call
* to tzset() set (if any).
*/
static char * lastTZ = NULL;
/*
* Flag indicating that time zone information came from GetTimeZoneInformation
* API call.
*/
static int tzapiused;
/*
"不要替换的内容1"
*/
static TIME_ZONE_INFORMATION tzinfo;
//"不要替换的内容2"
char strTest;
strTest="要替换的内容"
WLWW 2008-08-08
  • 打赏
  • 举报
回复
都下班了,看奥运去了。唉,我们还是正常下班,郁闷了
WLWW 2008-08-08
  • 打赏
  • 举报
回复
嗯,这个是最理想化的。引号里也可能有/*、*/ 之类的,所以个算法有点烦
vbman2003 2008-08-08
  • 打赏
  • 举报
回复
如果/*、*/ 中有/* //或者 //中有 /**/比较麻烦哎
-------------------------
这个情况没考虑......
vbman2003 2008-08-08
  • 打赏
  • 举报
回复
比较笨的方法:


Dim fName As String
Dim hFile As Long
Dim sFile As String, surFile As String
Dim i As Long, j As Long
Dim tmp, stmp

fName = "D:\test.txt"
hFile = FreeFile()
Open fName For Binary Access Read As hFile
sFile = Space(LOF(hFile))
Get #1, , sFile
Close hFile
surFile = sFile '备份原文件内容

'先替换掉sFile/*...*/之间的内容
tmp = Split(sFile, "/*")
For i = 0 To UBound(tmp)
tmp(i) = Split(tmp(i), "*/")(0)
sFile = Replace(sFile, "/*" & tmp(i) & "*/", "")
Next
'处理//后的内容
tmp = Split(sFile, "//")
For i = 0 To UBound(tmp)
tmp(i) = Split(tmp(i), vbCrLf)(0)
sFile = Replace(sFile, "//" & tmp(i), "")
Next
'Debug.Print sFile

'sFile就是没有注释的内容了
'替换:
tmp = Split(sFile, vbCrLf)
For i = 0 To UBound(tmp)
If InStr(tmp(i), Chr(34)) Then
stmp = Split(tmp(i), Chr(34))
surFile = Replace(surFile, tmp(i), _
stmp(0) & Chr(34) & "你想替换的内容......" & Chr(34) & stmp(2))
End If
Next
'Debug.Print surFile
hFile = FreeFile()
Open fName For Output As hFile
Print #hFile, surFile
Close hFile
WLWW 2008-08-08
  • 打赏
  • 举报
回复
控件,什么意思?
jxxiongxujun 2008-08-08
  • 打赏
  • 举报
回复
你這個比較麻煩,你有一下控件更好
WLWW 2008-08-08
  • 打赏
  • 举报
回复
up
lsftest 2008-08-07
  • 打赏
  • 举报
回复
请给出示范数据及期望得到的结果.

7,763

社区成员

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

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