2012-02-29 89 views
0

我有一个非常大的文件名,它遵循标准的命名实践,我试图编写一个RegEx来匹配它们。.Net正则表达式示例具体示例

当你正在阅读的文件名,它遵循的约定:

P_D(组8位数字的)_t(一套8numeric)images.ext(字母和数字的任何#)

对于例如: p_d12345678_t12345678_images.ext_0

我试图带回无法识别的转义序列或找不到匹配。例如,这一个带回没有匹配:

fileInfo = value 
'that changes depending on what file I'm looking for 

RegEx("\bp\b_\bd\d*\b_\bt" & fileInfo & "\d*\b_images\\.\bext_\w*") 

做这样的工作或我只是做错了吗? 感谢您的帮助!

+0

'\ b'代表单词边界,,下划线('_')是有效的单词字符,它们周围没有边界.. – Aprillion 2012-02-29 16:43:23

+0

http://www.codeproject.com/Articles/9099/The-30 -Minute-Regex-Tutorial 谈论\ b如果你想精确匹配某事.. 我很感激你的帮助,但是你们都没有解决这个事实,我需要从fileInfo插入一个值到正则表达式中。 – GetBrutal 2012-02-29 16:52:07

+0

'a \ b_a'不会匹配''a_a''就像'a \ baa'不匹配'“aaa”' - fileInfo **可以长多久 - 它已经是一个包含8位数字的字符串? – Aprillion 2012-02-29 17:02:59

回答

1

UPDATE包括0-8个字符+的的fileInfo String对象,以符合新规范:

"\bp_d\d{8}_t" & fileInfo & "\d{" & 8 - fileInfo.Length() & "}_images\.ext\w*\b" 
+0

谢谢!..这看起来像它会完美的工作。我感谢你的帮助 – GetBrutal 2012-02-29 17:58:07

+0

也 - 最后一个问题...正确工作。必须是这样的,对吧? \\。 – GetBrutal 2012-02-29 18:03:34

+0

呃,不是在正则表达式中 - 但是如果vb.net使用\来取代所有字符\应该是\\,而不是在点 – Aprillion 2012-02-29 18:07:54

0

因此,样本是:

p_d12345678_t12345678_images.ext_0 

模式则是768,16:

"p_d\d{1,8}_t\d{1,8}_images\.ext_0" 

你为什么要使用所有的\ b转义?

+0

有示例之前的示例 – Aprillion 2012-02-29 16:50:04

0
p_d(\w){8}_t(\w){8}_images.ext_(\w){1} 

匹配,你所提供的样本 - 我用\ w而不是\ d,因为您建议8个字符是字母数字,如果它们只是数字,那么您可以将它们更改为\ d

测试此处:http://regexpal.com/?flags=&regex=p_d(%5Cw)%7B8%7D_t(%5Cw)%7B8%7D_images.ext_(%5Cw)%7B1%7D&input=p_d12345678_t12345678_images.ext_0

+0

\ w不是“字母数字”,它包括'_',也不是“数字”...... – Aprillion 2012-02-29 16:49:15

+0

它们只是数字,对不起我编辑过。问题是我需要插入的价值.. – GetBrutal 2012-02-29 16:56:05