Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
RegExReplace-请给我一些示例,让我开始学习_Regex_Ms Access_Vba - Fatal编程技术网

RegExReplace-请给我一些示例,让我开始学习

RegExReplace-请给我一些示例,让我开始学习,regex,ms-access,vba,Regex,Ms Access,Vba,我正在尝试使用RegExReplace在解析某些文本以便在Access数据库中使用之前对其进行预处理。目前,我一直在将越来越多的字符串模式定义到一个表中,然后使用VBA中的stock Replace()函数使用该表。工作正常,但在一些方面没有达到目标;我很确定正则表达式对我来说是一个更好的长期解决方案,但我完全不知道如何构造它们 我想看看这里的聪明人是否可以通过我的数据中的一些实际示例,通过演示将产生所需结果的正则表达式字符串,帮助我完成这项任务: 1. 6 IN

我正在尝试使用RegExReplace在解析某些文本以便在Access数据库中使用之前对其进行预处理。目前,我一直在将越来越多的字符串模式定义到一个表中,然后使用VBA中的stock Replace()函数使用该表。工作正常,但在一些方面没有达到目标;我很确定正则表达式对我来说是一个更好的长期解决方案,但我完全不知道如何构造它们

我想看看这里的聪明人是否可以通过我的数据中的一些实际示例,通过演示将产生所需结果的正则表达式字符串,帮助我完成这项任务:

1.  6 IN                6IN
2.  12.3 IN X 2 YD      12.3IN_X_2YD
3.  6IN X 4IN           6IN_X_4IN
4.  8X120MM             8_X_120MM
5.  1 1/2"              1.5IN
6.  CAT, DOG            CAT DOG
7.  CAT,DOG             CAT DOG
8.  CAT ,DOG            CAT DOG
9.  CAT , DOG           CAT DOG
我的模式失败的方式有:导管灌注=>导管灌注

我将使用多通道方法,而不是试图提出一些非常复杂的表达式

谁能为这些样品中的任何一个提供一些初步指导。我相信我将能够根据需要利用这些样本进行扩展

[编辑:]我确实找到了一些有用的例子:

 NewStr := RegExReplace("abc123123", "123$", "xyz")  ; Returns "abc123xyz" because the $ allows a match only at the end.
 NewStr := RegExReplace("abc123", "i)^ABC")  ; Returns "123" because a match was achieved via the case-insensitive option.
 NewStr := RegExReplace("abcXYZ123", "abc(.*)123", "aaa$1zzz")  ; Returns "aaaXYZzzz" by means of the $1 backreference.
 NewStr := RegExReplace("abc123abc456", "abc\d+", "", ReplacementCount)  ; Returns "" and stores 2 in ReplacementCount.
[编辑2]:进展顺利

 strText = "BANDAGE, ADHESIVE,      2 FT    X 3.5 IN X 0.25MM, LATEX-FREE"

 strResult = RegExReplace(strText, "(,|\s+)", " ", True)                       
 strResult = RegExReplace(strResult, "\s+(IN|FT|YD)\s+", "$1 ", True) 
 strResult = RegExReplace(strResult, "\s+X\s+", "_X_", True)              
产生:

 BANDAGE ADHESIVE 2FT_X_3.5IN_X_0.25MM LATEX-FREE

一些可能有用的正则表达式:

/\s+IN/IN/
/\s+X\s+/_X_/
/(?:\d)X(?:\d)/_X_/

在这里,多次传球是保持头脑清醒的唯一方法。不要试图一次通过就完成。这和正则表达式有什么关系?请原谅我的语法错误。将“RegexReplace”与“Regex”连接似乎是合乎逻辑的,因为构造的字符串用于查找替换文本的模式与Regex非常相似。提供的任何其他指针?
s/\s+X\s+/\ux\ux/
不适用于
4。8X120MM 8_X_120MM
,而
s/(?\d)X(?\d)/\u X/
只是。。。模式语法错误单面体,我意识到没有单一的模式可以解决我的需要。需要一种按规定顺序的多路径方法。虽然Terje提供的示例不是通用的,但它确实开始照到我的要求。