繁体   English   中英

正则表达式和Openrefine中具有/ n匹配的文本

[英]Text with /n matching in regex and Openrefine

我正在尝试在开放式优化中过滤包含new lines的文本。

输入为:

Them Spanish girls love me like I'm Aventura
I'm the man, y'all don't get it, do ya?
Type of money, everybody acting like they knew ya
Go Uptown, New York City, bitch
Them Spanish girls love me like I'm Aventura
Tell Uncle Luke I'm out in Miami, too
Them Spanish girls love me like I'm Aventura

预期结果将是:

Type of money, everybody acting like they knew ya
Go Uptown, New York City, bitch
Them Spanish girls love me like I'm Aventura

我试图获得与关键字和之前和之后的行。

我的标准正则表达式代码如下所示:

/((.*\\n){2})^.*\\b(New York)\\b.*((.*\\n){3})/m

但这在公开优化中不起作用。 我尝试了以下操作,但仅返回“ null”

value.match(/.*(\\New York)/.*)

有人知道我该怎么做吗? 我真的需要保持警惕,所以我不能在比赛前做replace(/\\n/,'')

全新的OpenRefine 3具有find()函数,match()更友好。

我认为这个正则表达式可以解决问题:

value.find(/(.*\n){1}.+New York.+(\n.*){1}/).join('\n')

结果:

在此处输入图片说明

如果出于某种原因您更喜欢使用OpenRefine 2.8,则Python / Jython提供了另一种选择:

import re
matches = re.findall(r".+?\n.+New York.+\n.+", value)
return "\n".join(matches)

结果:

在此处输入图片说明

如果您想完全避免使用RegEx,而只是阅读文本并在此行之前和之后写这行,则可以在Excel中的单元格A1中编写该文本:

Public Sub TestMe()

    Dim inputString As String
    inputString = Range("A1")

    Dim lookForWord As String
    lookForWord = "New York"

    Dim inputArr As Variant
    inputArr = Split(inputString, vbLf)

    Dim line As Variant
    Dim previousLine As String
    Dim foundWord As Boolean
    Dim linesAfter As Long: linesAfter = 1

    For Each line In inputArr
        If InStr(1, line, lookForWord) Then
            previousLine = previousLine & vbCrLf & line
            foundWord = True
        Else
            If foundWord And linesAfter Then
                previousLine = previousLine & vbCrLf & line
                linesAfter = linesAfter - 1
            ElseIf linesAfter Then
                previousLine = line
            End If
        End If
    Next line

    If Not linesAfter Then Debug.Print previousLine

End Sub

Split()将文本解析为如下数组:

在此处输入图片说明

linesAfter变量可以告诉您单词后应显示多少行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM