【问题标题】:regular expression [duplicate]正则表达式 [重复]
【发布时间】:2021-02-04 05:19:13
【问题描述】:

我不知道为什么这些术语之间有星号。如何编写正则表达式以使其仅返回字母和数字,中间不带星号?

我试过的正则表达式是: CUST_NUM_REMITT_AMT_REGEX => qr/^\w+ \w+ (.?) (.?)$/ 它在 perl 语句中是:

($edi_h{$process_data}{$get_remitt_data}{cust_num},
$edi_h{$process_data}{$get_remitt_data}{remitt_amt}) =
$rec =~ /$regex_h{CUST_NUM_REMITT_AMT_REGEX}/
if ($rec =~ /$regex_h{REMITT_IND}/);
($edi_h{$process_data}{$get_remitt_data}{cust_num}) = " ";

此表达式返回空白客户编号,但金额前面有一个星号。

问号是否返回结果?

代码前面有这一行

$/ = $sav_delimiter;
(@recs) = $file_data =~ /(.*?)\n/g;

【问题讨论】:

  • 我看到您更新了问题以包含示例文本“\RMR*IV*43070661**5759.61”。您还可以提供您期望的文本吗?你说要删除星号,但是你想像“/RMRIV430706615759.61”一样运行所有东西还是应该用空格或其他东西替换星号?
  • 另外,我不熟悉=~ 语法。这是用什么语言运行的?有时,根据运行时的不同,正则表达式会有所不同。
  • =~ 语法告诉 Perl 应用正则表达式。
  • 我相信每个词都应该有空格

标签: regex perl


【解决方案1】:

const input = "RMR*IV*43070661**5759.61";
const regex = /\*+/g;
console.log(input.replace(regex, " "));

这个正则表达式匹配一个或多个相邻的星号。因为 * 在正则表达式中具有特殊含义,所以必须用反斜杠对其进行转义。我还使用全局选项(末尾的 g)使其适用于所有事件,而不仅仅是第一个。

然后我使用 JavaScript 中的 string.replace 函数将这些星号替换为一个空格。我不熟悉 perl,但我认为有一个类似的结构可以用另一个字符串替换用正则表达式找到的匹配项。

【讨论】:

  • 非常感谢!感谢您的详细回答!
  • 不客气!如果这回答了您的问题,请单击此答案的接受按钮。 :-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-23
  • 2016-06-13
相关资源
最近更新 更多