簡體   English   中英

從非結構化文本中提取字符串值

[英]Extracting string value from unstructured text

我正在使用的數據結構旨在將單個字段用於多種用途。 我有超過1萬條記錄要處理,我需要提取一系列有意義的特定字符到我的dataFrame的另一個字段中。 我需要從中提取出可預測的模式; 下面是一個示例:

x = "This field has lots of text and also what I need to extract from it which is 555_AB345678"

我需要提取的是555_AB345678值。 前3個值(555)和下划線都是可以預測的; AB345678不是。 但是,至少字符串的最后4個值始終是數字。 我不能保證我想要的值在字符串的末尾,但是在大多數情況下它們是對的,因此我很滿意從那里開始。

我已經探索過將gregexpr()與substring()結合使用,但是還沒有開始工作。 我以為strsplit()可以工作,但是我沒有可分割的分隔符(只是我需要的值中的可預測模式)。 我也發現了類似的問題,但似乎沒有一個符合我的標准。

根據模式提取R中的子字符串

我想看看這里是否有人對如何做到這一點有建議。

這種卷積提取器的基本R方式是:

regmatches(x, regexpr("555_.*$", x))
# "555_AB345678"

$在字符串的末尾; .* ,任何字符序列(包括一個空字符)。


或者,我們可以將整個字符串替換為所需的部分:

sub("^.*(555_.*)$", "\\1", x)
# "555_AB345678"

^是字符串的開頭,因此我們現在要匹配整個字符串,從^$ \\\\1替換是指括號中的部分。 有關詳細信息,請參見?regex 對於語法更好的提取程序,可以嘗試使用stringr包:

library(stringr)
str_extract(x, "555_.*$")
# "555_AB345678"

你有模式!

threeLeadingValues-下划線-3-Digits足以使該表達式:

/.{3}_.*\d{3}/

https://regex101.com/r/bD0pF2/2

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM