r - 如何编写正则表达式模式以从银行对帐单中的 AMT 提款交易中提取位置
问题描述
我希望编写一个正则表达式模式来从 350k 记录的数据的叙述字符串中提取地址或位置。
txn_add <- data.frame(NARRATION=c("$ $ $ +YBL PATAUDI CHOWK \ $",
"$ $ -ATM CASH 83181 + MAIN BHAWANA ROAD NEW DELHI $",
"$ $ [5839/P1TNDE06/+RAGHUBARPURA $",
"$ MAXIMUMOUTFITS PRIVATE LIMITED } $ ATDELHIIN- $ $ /5631 $",
"$ ATM CASH-N4077800-+SPRINGFIELDCOLONYFFAR IDABADHRIN-04/06/18 $ /5631 ( $ $ VERIFICATION $"))
我运行了以下正则表达式模式:
gsub(".*[:|+]([^.]+)[$|\\|\\/].*", "\\1", txn_add$NARRATION)
我得到的输出为:
[1] "YBL PATAUDI CHOWK "
[2] " MAIN BHAWANA ROAD NEW DELHI "
[3] "RAGHUBARPURA "
[4] "$ MAXIMUMOUTFITS PRIVATE LIMITED } $ ATDELHIIN- $ $ /5631 $"
[5] "SPRINGFIELDCOLONYFFAR IDABADHRIN-04/06/18 $ /5631 ( $ $ VERIFICATION "
此输出不正确,因为我必须实现一些条件: 地址可以从:
1. '+'
2. '@'
3. ' AT '
4. ':'
5. <P|S><SBI><P|S> # EXACT TEXT PRECEEDED AND FOLLOWED BY PUNCTUATION OR SPACE
6. <NNN> FOLLOWED BY <P|S|A> # 3 NUMBERS FOLLOWED BY EITHER PUNCTUATION OR SPACE OR ALPHA
并以:
1. -
2. /
3. $
4. \
5.<NNNNNNN> # Combination of numbers
可以包含
Alphabets, numbers, dot (.), dash (-),space ( ), coma(,),underscore (_) brackets(()) at (@), hash (#) and(&) semi colon (;)
这是从交易中提取地址,所需的输出将是:
[1] "YBL PATAUDI CHOWK"
[2] "MAIN BHAWANA ROAD NEW DELHI "
[3] "RAGHUBARPURA "
[4] "DELHIIN"
[5] "SPRINGFIELDCOLONYFFAR IDABADHRIN"
我无法获得所需的输出。接下来我可以尝试什么?
解决方案
您可以使用捕获组
(?:[+@:]|\bAT(?!M))\s*([A-Z]+(?:\s+[A-Z]+)*)
解释
(?:
非捕获组[+@:]
匹配其中之一+
@
:
|
或者\bAT(?!M)
匹配 AT 后不跟M
)
关闭组\s*
匹配 0+ 个空格字符(
捕获组 1[A-Z]+(?:\s+[A-Z]+)*
将字符 AZ 与 1+ 之间的空白字符匹配
)
关闭组 1
查看正则表达式演示
与组之前和之后的所有子匹配:
sub(".*(?:[+@:]|\\bAT(?!M))\\s*([A-Z]+(?:\\s+[A-Z]+)*).*", "\\1", txn_add$NARRATION, perl=TRUE)
推荐阅读
- python - 如何在 clearall 命令中使用 wait_for?(discord.py)
- c++ - WINAPI 窗口未显示
- git - 在 git 中的两个标签之间拉取请求
- javascript - 在 React 中将类组件转换为功能组件
- java - 有没有办法设置 Ignite 瘦客户端类加载器?
- powershell - 在 pscustomobject 中重复一个值
- swift - 无法在 ios 设备上模拟推送通知
- python - 使用带有 python 代码的屏幕管理器切换屏幕
- python - 无法在python中安装pptk
- python - 是否可以在没有 exec() 的情况下自动使模块的所有公共类方法成为全局函数?以turtle.py为例