精华内容
下载资源
问答
  • 本文作者:田明月 彭燕 何田丽导读在之前的推文《正则表达式匹配和提取函数》和《正则表达式替换函数》中我们介绍了正则表达式的匹配与提取、替换函数,接下来我们对正则表达式中的元字符进行简要的介绍 。...

    本文作者:田明月 彭燕 何田丽

    导读

    在之前的推文《正则表达式匹配和提取函数》和《正则表达式替换函数》中我们介绍了正则表达式的匹配与提取、替换函数,接下来我们对正则表达式中的元字符进行简要的介绍 。所谓元字符就是指那些在正则表达式中具有特殊意义的专用字符,其使得正则表达式具有强大的文字处理能力。接下来,我们讲解Stata当中的八类元字符。

    1.基本元字符

    • "." ——表示匹配除换行符和回车符外的任意单个字符

    • "|" ——表示逻辑“或”

    • "[]" ——表示匹配字符集合中的一个字符

    • "[^]"——表示匹配不在字符集合中的一个字符,即对集合取非

    • "-"——表示定义一个区间,如a-z即代表小写字母a-z

    • "()"——表示生成子表达式

    • "\"——表示对下一个字符进行转义,转义即理解为取消其特殊含义

    接下来我们结合正则表达式的替换函数用Stata对基本元字符举些简单的例子。

    disp ustrregexra("河南大学,excellent!123",".","A")//由于"."可匹配任意一个字符,因此将汉字字母数字标点全部换成了"A"

    e2df0775e4d7dcaf58b27c8cf47f844e.png

    disp ustrregexra("河南大学,excellent!123","[0-9]","A")//将所有的数字替换成"A"

    5d2be7ca7124cc8b7d4ad715bda0c347.png

    disp ustrregexra("河南大学,excellent!123","[^a-z0-9]","A")//对集合取非,将不是字母或数字的子字符串替换成"A"

    115134a9eef7d5f5618b5222b5cdc380.png

    disp ustrregexrf("河南大学,excellent!123","!|excellent","A")//只替换正则表达式匹配到的第一个子字符串

    3bd6d46e384e67326e95570c73c1f295.png

    2.数量元字符

    • "*"——匹配前一个字符或子表达式任意次重复,可以匹配零次

    • "+"——匹配前一个字符或子表达式一次或多次重复,与"*"的唯一区别在于不能匹配零次

    • "?"——匹配前一个字符或子表达式零次或一次

    • "{}"——匹配前一个字符或子表达式n次

    • "{m,n}"——匹配前一个字符或子表达式至少m次至多n次

    • "{n,}"——匹配前一个字符n次或更多次

    接下来,我们通过正则表达式的匹配、提取函数利用Stata对数量元字符进行举例:

    我们首先生成10行观测值

    clearset obs 10gen v = "A"+ "B" * (_n-1)list

    d6a888c64b8277763d245012d2443b1f.png

    我们分别生成六个不同的变量:

    gen v1 = ustrregexs(0if ustrregexm(v,"AB*")//用"AB*"对v进行匹配,将匹配到的内容全部提取出来生成变量v1gen v2 = ustrregexs(0) if ustrregexm(v,"AB+")//用"AB+"对v进行匹配,将匹配到的内容全部提取出来生成变量v2gen v3 = ustrregexs(0) if ustrregexm(v,"AB?")//用"AB?"对v进行匹配,将匹配到的内容全部提取出来生成变量v3gen v4 = ustrregexs(0) if ustrregexm(v,"AB{3}")//用"AB*"对v进行匹配,将匹配到的内容全部提取出来生成变量v4gen v5 = ustrregexs(0) if ustrregexm(v,"AB{1,3}")//用"AB{1,3}"对v进行匹配,将匹配到的内容全部提取出来生成变量v5gen v6 = ustrregexs(0) if ustrregexm(v,"AB{3,}")//用"AB{3,}"对v进行匹配,将匹配到的内容全部提取出来生成变量v6list

    0b2122126208ed386f9140d28226a3e1.png

    3.特殊元字符

    • \d——匹配任意数字字符,相当于“[0-9]”

    • \D——“\d”的反义,匹配任意非数字字符,相当于“[^0-9]”

    • \w——匹配任一字母、数字、下划线,在 Unicode 编码中也可匹配汉字、俄文等字符

    • \W——“\w”的反义,包括空白字符、标点等

    • \s——匹配一个空白字符,包括空格、水平制表符、换行符、回车符等

    • \S——“\s”的反义,匹配任意非空白字符

    例:

    dis ustrregexra("河南大学,very good! number 1.", "\d", "X") //元字符“\d”匹配任意数字字符,相当于“[0-9]”,能够与“1”匹配,并相应的把“1”替换成“X”。

    c6c937754124d11845fb3cebac92439c.png

    dis ustrregexra("河南大学,very good! number 1.", "\D", "X") //元字符“\D”表示匹配任意非数字字符,在该字符串中,“\D”将匹配到除了数字“1”的所有字符,包括汉字、标点符号、空格、英文字母等。相应地,把这些非数字字符全部替换成“X”。

    51ee644dc5edf5f892ec1380a8e43327.png

    dis ustrregexra("河南大学,_\is good!_\ number 1.", "\W", "X") //“\W”是“\w”的反义,相当于“[^\w]”。“\W”可以匹配到“\w”匹配不到的字符(在该字符串中,包括反斜杠、标点符号以及空格),并把其替换成了“X”。

    e2bcde47e267905f1fa5725826178090.png

    4.位置元字符

    • ^——匹配字符串的开头位置

    • $——匹配字符串的结尾位置

    • \b——匹配单词的边界位置

    例:

    dis ustrregexra("aBBa", "a", "X") //直接用正则表达式“a”可以匹配字符串“abba”开头和末尾处的“a”,利用正则表达式替换函数ustrregexra()将匹配到的两个“a”替换为“X”,结果为“XBBX”。

    193dfa3228a0476c51a3ef76cc859b12.png

    在这里,如果仅仅想匹配到位于字符串末尾的“a”,可以将“$”放在“a”的右边,再进行替换时只有结尾处的“a”被替换。

    dis ustrregexra("aBCa", "a$", "X")

    c73821a59e0e27b8ae40997284b83621.png

    在函数 ustrregexra()中,如果我们使用正则表达式“^a$”匹配字符串“abba”,是否可以既替换掉字符串开头的“a”,又替换掉字符串末尾的“a”呢,显然“^a$”既没有匹配到字符串开头的“a”,也没有匹配到字符串末尾的“a”,相应地也没有发生替换。因为“^a$”要求字符“a”既位于字符串开头又位于字符串末尾。事实上,“^a$”只能匹配到由单个字符“a”组成的字符串。

    dis ustrregexra("abba", "^a$", "X")dis ustrregexra("a", "^a$", "X")

    b8a4497016f84f42f14139f846656677.png

    e154aacda335fbb0a7f834281a7586d0.png

    5. 前后查找

    • ?=——正向向前查找(向右是什么),查找出现在被匹配文本右边的字符,但不消费此字符

    • ?<=——正向向后查找(向左是什么),查找出现在被匹配文本左边的字符,但不消费此字符

    • ?!——负向向前查找(向右不是什么),向右查找不与给定模式相匹配的文本

    • ?

    需要注意的是,前后查找的四个元字符在使用的时候必须放到一个子表达式里边,即“(?= )”、“(?<= )”、“(?! )”、“(?

    假设有一段文本“Lucky D og”,可以看到单词“D og”中间多了一个空格,现在想将这个空格删除掉,但是直接用空格“ ”进行匹配,会将“Lucky”和“D og”两个单词之间的空格也删除掉。进一步观察发现,我们要替换的单词“D og”中间的空格,右边是小写字母;而两个单词之间的空格右边是一个大写字母。所以我们要替换的其实是右边是一个小写字母的空格,小写字母可以用集合“[a-z]”进行匹配,“右边是什么”可以用正向向前查找,相应的正则表达式为“ (?=[a-z])”。

    dis ustrregexra("Lucky D og", " (?=[a-z])", "")

    f430b0d1894baacfc82ce22b38057021.png

    6.空白元字符

    • \f——表示换页符

    • \r——表示回车符

    • \n——表示换行符

    • \t——水平制表符

    • \v——垂直制表符

    (windows系统的回车键就是“回车符+换行符”的组合(\r\n))

    例:

    a0180e7ed405a1478b6b2e633a52e488.png

    首先将经济学研究方法.txt读入Stata,使用fileread命令可以将文本全部读入一个单元格中。由于“经济学”与“研究方法”之间存在换行符和回车符,所以两者中间会出现空白。

    clear set obs 1gen v = fileread("E:\经济学研究方法.txt")list

    1e2ef7b6671baabd6dfa3e0c06e282df.png

    为了将换行符和回车符显示出来,接下来我们使用替换函数做些调整。通过ustrregexra函数把回车符\r替换成♥,把换行符\n替换成⚪,那么下图中所示就是最终得到的结果。

    replace v = ustrregexra(v, "\r", "♥")replace v = ustrregexra(v, "\n", "⚪")list

    9d69120fb64b157ee318f7c26db46849.png

    7.回溯引用

    • \n——匹配第n个子表达式匹配到的内容(例如:\2表示第2个子表达式匹配到的内容)

    • $n——把文本中的某个字符串替换成第n个子表达式匹配到的内容(例如:$1表示将某个字符串替换成第1个子表达式匹配到的内容)

    举一个简单的例子,将"Tomorrow is is another day"中的"is is "替换成"is "。
    首先我们来看看不使用元字符的情况。使用替换函数ustrregexra,将"is is "在字符串"Tomorrow is is another day"中匹配到的所有子字符串全部替换为"is ",程序如下:

    dis ustrregexra("Tomorrow is is another day", "is is ", "is ")

    ff95aae461674bf2d6af9999887aab11.png

    若是使用元字符,首先"is is "中的第一个"is "加上小括号,这就成为了一个子表达式,而子表达式的添加不影响匹配结果,然后将第二个"is "改为"\1","\1"表示匹配第一个子表达式匹配到内容,即匹配到"is ",程序如下:

    dis ustrregexra("Tomorrow is is another day", "(is )\1", "is ")

    90c471f9f3f1c38cc284533373728e7f.png

    其实上面匹配函数的最后"is "也可以写成"$1","$1"表示正则表达式"(is )\1"匹配到的字符串"is is "替换成第一个子表达式匹配到的内容"is ",程序如下:

    dis ustrregexra("Tomorrow is is another day", "(is )\1", "$1")

    38273c7cd682c46964f446b4069e529e.png

    8.Unicode转义字符

    Unicode转义字符是以“\uXXXX”格式表示的字符,其中X为16进制数字(即0-9、A-F)。在Stata中有两个函数ustrunescape(s)ustrtohex(s,[,n])可以实现Unicode转义字符的解码与编码。

    ustrtohex(s[,n])是指将字符串s从第n个Unicode字符开始进行编码,转换成Unicode转义字符。

    例如,使用ustrtohex函数把“经济学研究方法”编码成Unicode转义字符,程序如下:

    dis ustrtohex("经济学研究方法")

    运行上述程序可以得到,“经”的转义字符“\u7ecf”、“济”的转义字符“\u6d4e”、“学”的转义字符“\u5b66”、……

    9eadd935402c28d629ba63d7538575f2.png

    dis ustrtohex("经济学研究方法",3) //将“经济学研究方法”从“学”字处开始编码

    034bddbcac7e8f1c8067e8783f681238.png

    ustrunescape(s)是指将Unicode转义字符串s进行解码。

    例如现在将上面编码好的Unicode转义字符用ustrunescape(s)函数去解码,我们就得到了它对应的Unicode字符,程序如下:

    dis ustrunescape("\u7ecf\u6d4e\u5b66\u7814\u7a76\u65b9\u6cd5")

    6d6017cd558cf688990be61d36b0f8fb.png

    上就是对正则表达式中的元字符所做的基本介绍及简单的举例,除了上述内容的介绍,元字符也还有很多其它应用。元字符在正则表达式中具有举重若轻的位置,希望通过今天的介绍,大家能对元字符有更进一步的了解。
    展开全文
  • 作者:python来源:SegmentFault 思否社区正则表达式用来处理字符串,对字符串进行检索和替换,另外正则在python爬虫的应用也是相当广泛!特点灵活性、逻辑性和功能性非常强可以迅速地用极简单的方式达到字符串的...
    作者:python来源:SegmentFault 思否社区
    正则表达式用来处理字符串,对字符串进行检索和替换,另外正则在python爬虫的应用也是相当广泛! 特点
    • 灵活性、逻辑性和功能性非常强 
    • 可以迅速地用极简单的方式达到字符串的复杂控制

    正则语法

    `# 1、数字和字母都表示它本身, . 表示匹配除了换行以外的任意字符,    . 表示匹配 .
    # 2、很多字母前面添加  会有特殊含义
        - n:换行
        - t:制表符
        - d: 匹配数字,等价[0-9]
        - D:非数字,等价于[^0-9]
        - w:表示数字、字母以及下划线,中文,等价于[0-9a-zA-Z_]
        - W:表示w取反
        - s:表示任意的非打印字符(空格、换行、制表符)
        - S:表示非空白字符
    # 3、绝大多数标点都有特殊含义
        - ():用来表示一个分组,如果需要表示括号,需要使用 
        - []: 匹配范围,[0-9] 表示0~9范围中的一个,[0-9a-zA-Z]
        - |: 表示或者的意思 re.search(r'f(x|y|z)m','pdsfxm')   匹配fxm
        - {},{2,},{,3},{1,3}:用来限定前面元素出现的次数  re.search(r'go{2}d''good')
        - *: 表示前面的元素出现的次数为0次及以上,等价于{0,}
        - +: 表示前面的元素出现的次数为1次及以上,等价于{1,}
        - ^:以指定的内容开头,或者取反的意思
        - $:以指定的内容结尾
    # 4、 ? 的两种用法
        - 规定前面元素出现的次数最多只能出现1次,等价于{,1}
        - 将贪婪模式转换为非贪婪模式(重点)` 


    re模块的介绍

    XM返佣 https://www.fx61.com/brokerlist/xm.html该模块是python中专门用于处理正则的默认,提供了相关的方法

    常用方法

    • match、search 只查询一次

    • finditer 查找到所有的匹配数据放到一个可迭代对象中

    • findall 把查找到的所有字符串结果放到一个列表中

    • fullmatch 完全匹配,字符串需要满足正则表达式

    Match类的使用

    调用re.match,re.search或者对re.finditer的遍历返回的对象都是re.Match对象

    Match类的属性和方法

    • pos、endpos 被查找字符串的起始和终端位置
    • span( ) 匹配到的下标位置(元组)
    • group 分组的概念
    `import re

    m = re.search(r'c.*z''abcdefgz')
    print(m.pos)  # 0
    print(m.endpos)  # 8
    print(m.span())  # (2, 8)
    # 使用group获取获取到匹配的字符串
    print(m.group()) # cdefgz

    # group表示正则表达式的分组
    # 1、在正则表达式里使用()表示一个分组
    # 2、如果没有分组,默认只有一组
    # 3、分组的下标从0开始

    # 这里有4个分组 
    m1 = re.search(r'(1.*)(2.*)(3.*4)''a1bcd2efgh3ij4k')
    print(m1.group())  # 默认就是第0组  1bcd2efgh3ij4
    print(m1.group(0))  # 第0组就是把整个正则表达式当做一个整体  1bcd2efgh3ij4
    print(m1.group(1))  # 1bcd
    print(m1.group(2))  # 2efgh
    print(m1.group(3))  # 3ij4

    #  groups() 将分组以元组的形式返回
    print(m1.groups())  # ('1bcd', '2efgh', '3ij4')

    # (?P 表达式) 给分组取个名字
    m2 = re.search(r'(?P1.*)(?P2.*)(?P3.*4)''a1bcd2efgh3ij4k')
    print(m2.groupdict())  # {'one': '1bcd', 'two': '2efgh', 'three': '3ij4'}` 

    • compile 在re模块,可以使用re.方法调用函数,还可以调用re.compile得到一个对象
    `import re

    # 这两种写法没有区别
    m = re.search(r'm.*a''111m22222a')
    print(m)  

    m2 = re.compile(r'm.*a')
    result = m2.search('111m22222a')
    print(result) # ` 


    正则修饰符

    正则修饰符是对表达式进行修饰
    • re.I 使匹配对大小写不敏感
    • re.M 多行匹配,影响 ^ 和$
    • re.S 使 . 匹配包括换行在内的所有字符
    `import re

    # . 表示除了换行以外的任意字符
    x = re.search(r'm.*a''abcdmonxxxa')
    print(x)  # None

    # re.S 匹配换行
    y = re.search(r'm.*a''abcdmonxxxa', re.S)  # 让 . 匹配换行
    print(y)

    a = re.search(r'x''helloXyz')
    print(a)  # None
    # re.I 忽略大小写
    b = re.search(r'x''helloXyz', re.I)
    print(b)  

    # re.M 让$ 匹配到换行
    m = re.findall(r'w+$''i am boyn you are girln he is man')
    print(m)  # ['man']
    n = re.findall(r'w+$''i am boyn you are girln he is man', re.M)
    print(n) # ['boy', 'girl', 'man']` 


    正则替换

    sub
    `import re

    # 把数字替换成x
    m = re.sub(r'd''x''hello123wor123ld')
    print(m)  # helloxxxworxxxld

    n = re.sub(r'd+''x''hello123wor123ld')
    print(n) # helloxworxld

    # 需求:将p中内容的数字乘2
    p = 'hello50good34'
    def test(x):
        y = int(x.group(0))
        y *= 2
        return str(y)  # 这里只能以字符串的形式返回

    print(re.sub(r'd+'test, p)) # hello100good68` 

    贪婪模式与非贪婪模式

    在正则表达式里,默认采用的是贪婪模式,尽可能匹配多的字符串 在贪婪模式后面添加?,可将贪婪模式转化为非贪婪模式
    import re

    m = re.search(r'm.*a''abcm123a456a')
    print(m)  # m123a456a,这里为什么不是m123a呢?因为这里默认使用的贪婪模式
    n = re.search(r'm.*?a''abcm123a456a')
    print(n)  # m123a    使用?将贪婪模式转化为非贪婪模式

    # ?
    print(re.match(r'aa(d+)''aa123bb456').group(1))  # 123
    print(re.match(r'aa(d+?)''aa123bb456').group(1))  # 1
    print(re.match(r'aa(d+?)''aa123bb456').group(0))  # aa1

    # 虽然说是尽可能少的匹配,但也要满足匹配呀
    print(re.match(r'aaa(d+)ddd''aaa2333ddd').group(0))  # aaa2333ddd
    print(re.match(r'aaa(d+?)ddd''aaa2333ddd').group(1))  # 2333

    print(re.match(r'aaa(d+).*''aaa2333ddd').group(0))  # aaa2333ddd
    print(re.match(r'aaa(d+?).*''aaa2333ddd').group(1))  # 2

    - END -

    c4c68716048d29af930da2bacc6e1697.png

    a49c94980764bde147cae2e3e585fcb2.gif

    展开全文
  • 之前在官方网站看过一篇讲解正则表达式的英文文章,当时看了感觉甚好,只是没有特别好的场景应用。今天在客户这里遇到了一个问题,正好想起来,于是重读,写一下最基本的使用方法。Tableau官方博客原文:Become a ...
    之前在官方网站看过一篇讲解正则表达式的英文文章,当时看了感觉甚好,只是没有特别好的场景应用。今天在客户这里遇到了一个问题,正好想起来,于是重读,写一下最基本的使用方法。 Tableau官方博客原文: Become a regex regular & wrangle imperfect data喜乐君:简单、实用、无技·不炫有一种场景是数据整理的“天敌”,就是你的数据混乱到不做整理完全无法使用,特别是喜欢用爬虫的人尤其如此。今天我在客户这里见到一个数据,大概率是客户的客户从其他渠道整理来的数据,因此混乱的很。在计算机的世界,有一种特别聪明的方式称之为:正则表达式,英文是Regular Expressions,简称RegEx它可以根据我们设置的规则,去查询或者返回特定的字符,比如返回从a到z的任意字符,可以用[a_z]来代替——注意是任意一个字母。那如果要返回ab两个字母呢?可以通过大括号设置匹配的数量,比如[a-z]{2}代表返回任意两个从a到z的字母的两位。Tableau中提供了四种正则表达式:
    • REGEXP_EXTRACT(字符串, 模式) 提取:从字符串中,提取符合某些字符模式的字符
    • REGEXP_EXTRACT_NTH(字符串, 模式, 序号) 提取第n个:多次符合条件,符合第n个
    • REGEXP_REPLACE(字符串, 模式, 替换字符串)  替换:把某些字符更换为特定字符
    • REGEXP_MATCH(字符串, 模式)  匹配:如果字符串中有特征一的某些字符,那么返回true
    理解的关键是“模式”,指的是一组特定条件的字符组合,比如从a到z,从A到Z,从0到9 等等。“模式”和单一的字符对应,是可以变化的一组条件。 Regex as “a pattern describing a certain amount of text” 模式用一个特别的符号来表示——方括号,比如用[A_Z]代表从A到Z的任意一个字母[1234]代表从1、2、3、4这四个数之一等等。
    • 方括号:用于查找某个范围内的字符

    • 小括号:用于提取你想要返回的字符模式

    • 大括号:正则匹配的字符数量

    [abc]查找方括号之间的任何字符。
    [^abc]查找任何不在方括号之间的字符。
    [0-9]查找任何从 0 至 9 的数字。
    [a-z]查找任何从小写 a 到小写 z 的字符。
    [A-Z]查找任何从大写 A 到大写 Z 的字符。
    [A-z]查找任何从大写 A 到小写 z 的字符。
    [adgk]查找给定集合内的任何字符。
    [^adgk]查找给定集合外的任何字符。
    (red|blue|green)查找任何指定的选项。

    1、REGEXP_EXTRACT(string, pattern)——常用

    第一个函数用于提取符合特定条件的部分,比如我们从一组混乱的数据中提取电子邮件地址,提取11位的电话号码。这是最常用的正则函数。结合我自己的一个案例,说明如下:比如我这里有很多的期权合约代码,格式一般为 CF009C12400.ZCE,分别代表“品种(CF)”、“合约(009)”、“看涨C/看跌P”、“行权价格(12400)”、分隔符(.)、交易所(ZCE)。

    0ac137d91bcaf5fc656539fa8dec6536.png

    每个品种、合约、行权价格的位数都不确定,因此不能使用left、right和mid字符串函数来拆分,不过可以使用已知的模式来返回特定的字符串部分。
    • 品种和合约:一位或者两位字母+三位或者四位数字;
    • 涨跌及行权价格:C或者P开始+数字,以分隔符(.)结尾
    • 交易所:分隔符(.)之后的字母,两位至四位。
    因此,品种和合约的正则表达式如下:

    3a8f1097dfd37b3401446de44f5df296.png

    ' ([A-Z]{1,2}+[0-9]{3,4}) '
    大括号中的数字,代表匹配的位数,因此字母可以是一位(M1707),也可以是两位(CU2003);同样数字可以是三位,也可以是四位。返回的结果如下:1d66174c3c75a88812f5494f48da29a5.png那,如果除了开头,其中还有符合这个规律的,我要提取如何处理?

    80c59c9a356dc31cd51af58089e37eda.png

    我们可以增加条件,但是保持返回的范围不变。第二组符合条件的字符串可以加一个特征:跟紧在数字0-9之后,这个特征是第一组字符串没有的。表达式如下:406d59534f9ba008dffaef2c34565756.png当然,这里的字母只有C或者P两个可能,因此也可以把([A-Z]{1,2} 改为:(C |P )
    REGEXP_EXTRACT([ts_code],'[0-9]+((C|P)+[0-9]{3,4})')

     

    2、REGEXP_REPLACE (字符串, 模式, 替换字符串)   正则匹配后替换

    Tableau提供了一个常见的替换方式,replace([string],'A','new') ,就是把string字符串中的A替换为new。正则匹配的替换,和这个replace有些类似,但是它适用的场景更多,比如除了A,还想要把B,C,F,Z也替换为new如何?我们可以使用正则匹配把上面的'A'替换为'[A-Z]' , 使用下面的正则匹配替换,就可以把所有的从A到Z的字符,全部替换为new字符串。
    Regexp_Replace([string],  '[A-Z]',  'new' )
    这里的关键是,一方面要保留单引号,证明这是一个字符串,另一方面使用 方括号,指多个字符之一——  '[A-Z]' 那如果我们不仅仅是 [A-Z],还想要小写的 [0-9],那怎么办呢?正则匹配可以同时写多个范围,因此可以改为下面的样式:
    Regexp_Replace([string],  '[A-Z][0-9]',  'new' )
    再则,还有一些特别的字符,我们也可以使用正则来匹配,比如把逗号、引号、短横,都改为新字符,每一个特殊字符,都可以加上一个斜线来代表,比如 \- 代表短横, \" 代表双引号。
    Regexp_Replace([string],  '[A-Z][0-9] \- \" \, ',  'new' )

     

    3、REGEXP_MATCH(字符串, 模式)

    如果我们要查找在一个字符串中是否包含了一个特征的字符,比如 string字段中是否包含'A',可以使用Tableau内置的contain函数,如下:
    Contain( [string], 'A' )  如果返回包含字符A,返回 true(是)
    和上面的正则匹配替换类似,如果我们把需求扩展一下,查找符合匹配条件的某一些字符串,比如只要是包含A到Z的任意一个字符,即返回true,刚才的contain函数就需要增加正则匹配,这里使用了Regexp_match( ) 。
    Regexp_match ( [string], '[A_Z]'  )

     

    总结

    Tableau中正则表达式的关键:

    • 匹配的模式,或者说条件用单引号包围;
    • 要返回的部分,使用括号包围,适用于REGEXP_EXTRACT函数;
    • 范围用[中括号]包围,代表这个集合内的任意一个值;
    • 如果要匹配多个数值,使用{大括号}指定数量。
     喜乐君  Dec 21, 2019 
    展开全文
  • 本次示例效果如下: TextBox1中输入如下字符串: 12<table><tbody><tr><td>1<br/>11</td><td>a</td></tr><tr><td>.../tr>...

    本次示例效果如下:

    TextBox1中输入如下字符串:

    12<table><tbody><tr><td>1<br/>11</td><td>a</td></tr><tr><td>2</td><td>b</td></tr></tbody></table>

    34<table><tbody><tr><td>3</td><td>c</td></tr><tr><td>4</td><td>d</td></tr></tbody></table>

    点击按钮, 转换第一个tr下面的td为tr 将TextBox1中的table中第一个tr下面的td 转换成th ,将结果显示在TextBox2中

    12<table><tbody><tr><th>1<br/>11</th><th>a</th></tr><tr><td>2</td><td>b</td></tr></tbody></table>

    34<table><tbody><tr><th>3</th><th>c</th></tr><tr><td>4</td><td>d</td></tr></tbody></table>

    转换第一个tr下面的tr为td 将TextBox2中的table中第一个tr下面的th 转换成td ,将结果显示在TextBox3中

    12<table><tbody><tr><th>1<br/>11</th><th>a</th></tr><tr><td>2</td><td>b</td></tr></tbody></table>

    34<table><tbody><tr><th>3</th><th>c</th></tr><tr><td>4</td><td>d</td></tr></tbody></table>

    相关代码如下:

     

    Imports System.Text.RegularExpressions 
    
    
    Public Class Form1
    
    
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    
            TextBox2.Text = ConvertFirstTrTdToTh(TextBox1.Text.Trim)
    
            TextBox3.Text = ConvertFirstTrThToTd(TextBox2.Text.Trim)
    
        End Sub
    
    
       Public Function ConvertFirstTrTdToTh(ByVal strContent As String) As String        
    
       Dim strOld As String = strContent.Trim
    
            'RegexOptions.Singleline 模式下 .代替任何字符 包括回车换行        
    
      Dim regexTable As New Regex("<tbody[^>]*>(.+?)</tr>", RegexOptions.Singleline) 
    
      Dim regexFirstTr As New Regex("<tr[^>]*>(.+?)</tr>", RegexOptions.Singleline)        
    
      Dim regexTd As New Regex("<td[^>]*>(?<tdContent>.+?)</td>", RegexOptions.Singleline)
    
            For Each mTable As Match In regexTable.Matches(strOld)
    
                Dim strFirstTr As String = regexFirstTr.Match(mTable.Value).Value
    
                'For Each mTd As Match In regexTd.Matches(strFirstTr)            
    
        Dim strTdTh As String = regexTd.Replace(strFirstTr, "<th>${tdContent}</th>")            
    
        'Next
    
                strOld = New Regex(strFirstTr).Replace(strOld, strTdTh, 1)
    
            Next
    
            ConvertFirstTrTdToTh = strOld     
    
    End Function
    
    
        Public Function ConvertFirstTrThToTd(ByVal strContent As String) As String        
    
      Dim strOld As String = strContent.Trim
    
          Dim regexTable As New Regex("<tbody[^>]*>(.+?)</tr>", RegexOptions.Singleline) 
    
      Dim regexFirstTr As New Regex("<tr[^>]*>(.+?)</tr>", RegexOptions.Singleline)        
    
      Dim regexTd As New Regex("<th[^>]*>(?<tdContent>.+?)</th>", RegexOptions.Singleline)
    
            For Each mTable As Match In regexTable.Matches(strOld)
    
                'Dim mgFirstTr As MatchCollection = regexFirstTr.Matches(mTable.Value)
    
                Dim strFirstTr As String = regexFirstTr.Match(mTable.Value).Value
    
                'For Each mTd As Match In regexTd.Matches(strFirstTr)            
    
    Dim strTdTh As String = regexTd.Replace(strFirstTr, "<td>${tdContent}</td>")           
    
      'Next
    
                strOld = New Regex(strFirstTr).Replace(strOld, strTdTh, 1)
    
            Next
    
            ConvertFirstTrThToTd = strOld    
    
     End Function
    
    End Class

     

    转载于:https://www.cnblogs.com/freeliver54/p/3253136.html

    展开全文
  • vb.net 正则表达式

    千次阅读 2017-06-02 10:47:46
    vb.net 正则表达式实战笔记 1.书写目的 Ø 了解正则表达式在vb.net的基本使用 Ø 用正则表达式实现文本的批量查找替换功能 2.要解决的问题 Ø 引用哪些类,类的哪些方法 Ø 如何匹配查找 Ø 如何在得到的匹配中...
  • 1.正则表达式是使用单个字符串来描述、匹配一系列符合某个句法规则的字符串简单来说, 是一种匹配字符串的方法,通过一些特殊符号,实现快速查找、删除、替换某个特定字符串。 2.正则表达式是由普通字符与元字符组成...
  • 2020 .06 .28正则表达式图 | gucci哈喽,大家好,我是小7,你们的IT知识干货提供者。文 | 与其终正则表达式▼什么是正则表达式?正则表达式是一种字符匹配的模式,简单来说就是用来匹配字符串的。它可以用来检查一个...
  • VB.Net - 正则表达式

    2018-03-01 09:39:03
    VB.Net - 正则表达式正则表达式是可以与输入文本匹配的模式。 .Net框架提供了允许这种匹配的正则表达式引擎。 模式由一个或多个字符文字,运算符或构造组成。定义正则表达式的构造有各种类别的字符,运算符和构造,...
  • 经过长时间学习VB.NET正则表达式,于是和大家分享一下,看完本文你肯定有不少收获,希望本文能教会你更多东西。在通常的程序设计中,对字符串的操作是不可缺少的部分。例如,我们经常需要从字符串中寻找特定的部分,...
  • VB.NET使用正则表达式:只取中文并替换多余空格 Regex.Replace(Regex .Replace(str, "[^\u4E00-\u9FA5]", " ").Trim(), "[\s]{2,} " , " ")
  • 【2】正则表达式应用——数字替换 希望把 asdadas123asdasdas456asdasdasd789asdasd 替换为: asdadas[123]asdasdas[456]asdasdasd[789]asdasd 在查找内容里面输入“([0-9])([0-9])([0-9])”,不含引号 “替换...
  • 编程是在学习中不断进步,这个不假,这两天一直在折腾VB脚本编程,原因可以追溯到我关于VB脚本编程的第一篇文章简单的VB小脚本之——文件处理脚本,里面提到了上帝,额不,是我的客户提到的一个简单的小要求,就是...
  • 正则表达在文字处理非常好用,可以进行复杂的字符串筛选判断,用于各种输入校验,字符串查找、替换,以及提取操作。
  • VB.NET利用正则表达式巧妙限制字符输入

    千次阅读 热门讨论 2014-07-17 20:46:10
    有时候甚至还需要从字符串中寻找特定的部分,或者对某一部分进行替换、删除等等。 使用传统的字符串函数判断方法或静态字符串操作方法,费时费力,且只能查找字符串中固定不变的部分,缺乏灵活性。 那有什么简单实用...
  • VB.NET机房收费系统之正则表达式

    热门讨论 2017-12-08 20:19:19
    在很多文本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本。 在VB.NET中使用正则表达式必须先引入命名空间System.Text.RegularExpressions,该命名空间包含一下七个类:Regex、Match、...
  • VS2005正则表达式--VB转C

    千次阅读 2013-01-09 08:27:36
    应用背景:在VS中查找或替换选项中选择“使用”,并在下拉框中选择“正则表达式”后,下边命令即可正常使用。 作者楼主师傅midas---范 去掉分行连字符(替换为空) \_\n:b* ----------------...
  • 用以替换 ’ 开头的正行注释 打开查找 查找内容:\ '.*\n 替换为:\n   替换空行 查找:\n\n 替换为:\n
  • 例如,我们经常需要从字符串中寻找特定的部分,或者对某一部分进行替换、删除等等。使用传统的静态字符串操作方法只能查找字符串中固定不变的部分,缺乏灵活性。而用正则表达式则可以规定待查找字符串的模式,查找...
  • 本人由于工作关系,需要一段代码,将给定的字符串中的非汉字去除,只保留汉字部分。  这个一般用正则表达式比较简单,网上有一些匹配汉字的正则表达式,拿来经过改造就能...用Replace方法将匹配的非中文替换为空...
  • [removed] 结果:是只有替换了字符串的首字符a 这不是我要的结果 看↓ 2.replace()支持正则表达式,它可以按照正则表达式的规则匹配字符或字符串,然后给予替换! [removed] var str = “ajfhslajd and”; //在此我...
  • Visual Studio 中使用的正则表达式 说明 2013-10-11 21:10:12|分类:VB和VBA知识|...参考:详解Visual Studio正则替换大法 http://developer.51cto.com/art/200908/141835.htm Visual Studio 中使用的正则表达...
  • 今天在用PHP正在表达是替换文本的时候怎么都达不到预期的结果,后来翻阅了有关资料才知道原来PHP默认支持的正则表达是支持两种POSIX和Perl,我之前学的是VB正则表达是,哈哈,判断数字是,我用\d,posix不兼容这种...
  • 使用VB6.0开发的正则表达式验证小工具,体积超小只有72KB. 支持 全局搜索 支持 大小写敏感匹配 支持 替换功能 这个是工具, 正则表达式的匹配与开发使用的语言无关。
  • 精通正则表达式(中英)

    热门讨论 2011-09-08 13:18:58
    vb.net测试 237 ruby测试 238 python测试 238 tcl测试 239 常见优化措施 240 有得必有失 240 优化各有不同 241 正则表达式的应用原理 241 应用之前的优化措施 242 通过传动装置进行优化 246 优化正则表达式本身 247 ...
  • UE 正则表达式

    千次阅读 2011-12-21 22:35:27
    UltraEdit是一套功能强大的文本编辑器,可以编辑文字、Hex、ASCII码,可以取代记事本,内建英文单词检查、C++及VB 语法加亮,可同时编辑多个文件,而且即使开启很大的文件速度也不会慢。软件附有 HTML Tag 颜色显示...
  • 能生成C#,VB等代码,支持各种替换,支持正则表达式模板导入导出,非常灵活。比较符合国内程序员的操作习惯。 点击下载 正则表达式基础学习 http://zh.wikipedia.org/wiki/%E6%AD%A3%E5%88%99%E8%A1%A...

空空如也

空空如也

1 2 3 4
收藏数 61
精华内容 24
关键字:

vb正则替换