regex - 正则表达式:匹配指定字符串后组合两个组
问题描述
文本字符串在以下配置中
RP0127630-001
NORTHWEST /
KMT
或者
RP0127630-001
NORTHWEST / KMT
我想返回的是:
1) 查找(?:[\w+]{2}\d{7}-\d{3}\r?\n)
= 例如 RP0127630-001(始终采用这种格式,但数字可能会改变);然后
2)在一行字符串中返回NORTHWEST-KMT(不带空格和/转换为-)
如您所见,有时字符串在两行中,有时在一行中。我努力了:
(?:[\w+]{2}\d{7}-\d{3}\r?\n)\b(?<LineItem1Trip>(.*)\r?\n*(.*))\b
但是我无法将 / 转换为 - 并且有时也无法将两行合二为一。
解决方案
您可以使用您的第一个模式,添加匹配换行符上的第一个单词并在第 1 组中捕获它。然后/
在空白字符之间匹配以下内容并在第 2 组中捕获以下单词。
然后在替换中使用-
介于两者之间的 2 个捕获组。
(\w{2}\d{7}-\d{3}\r?\n\w+)\s*/\s*(\w+)
如果在替换中使用组不起作用,您可以使用环视(如果支持)并仅-
在替换中使用:
(?<=\w{2}\d{7}-\d{3}\r?\n\w+)\s*\/\s*(?=\w+)
输出
RP0127630-001
NORTHWEST-KMT
RP0127630-001
NORTHWEST-KMT
请注意,在您尝试的模式中,这部分[\w+]{2}
也\w
可以匹配数字或下划线,而不仅仅是大写字符A-Z
+
字符类中的 char 可以从字面上匹配 char 。
推荐阅读
- php - 使用 VichUploaderBundle 和 EasyAdminBundle 上传多图像
- iis - 无法从 TFS 2018 中的响应标头中删除 ASP 网络 MVC 版本
- pandas - 在熊猫中将一列按另一列分组?
- javascript - Javascript倒数计时器Safari失败
- mysql - 从 phpmyadmin MySql 创建 UDF 函数
- javascript - NodeJS:递归获取文件夹大小
- python - 使用Python的开始和结束日期和时间的url格式
- python - 空数据帧上的 Groupby-Transform 引发异常
- javascript - 是否有任何降价或标准方法来处理稍后由前端解析的字符串中的占位符?
- r - ggplot中的功率曲线打印空白图