gpt4 book ai didi

正则表达式:如何将 .* 限制为仅数字和标点符号

转载 作者:行者123 更新时间:2023-12-04 03:36:08 24 4
gpt4 key购买 nike

我正在尝试创建可以在条件下使用 .* 的语句(例如,没有连续的两个字母),但我已经失败了一段时间。从这里开始:

"SOMETEXT 1-7, 39-41, 12B, 1-7, SOME OTHER TEXT, SOME MORE OTHER TEXT"

我想找到:

"SOMETEXT 1-7, 39-41, 12B, 1-7,"

我已经做到了可以查找后跟数字和任何逗号的文本:

^[A-Z]+[A-Z] [1-9].*,

在这里使用正则表达式生成器: https://regex101.com/r/yK6oF4/1

但在这里我仍然得到:

"SOMETEXT 1-7, 39-41, 12B, 1-7, SOME OTHER TEXT,"

当 .* 找到两个连续的字母时,我如何告诉它停止?还是一个逗号、一个空格和一个字母?这样的任何条件。我只想查找我在 .*.

之前找到的数字(包括“数字”,例如 12B)和标点符号

我使用 R,但我认为这个问题是关于正则表达式的一般问题。

最佳答案

你可以使用

^[A-Z]+[A-Z] [1-9].*?(?=,\s*[A-Z]{2})

参见 regex demo .您可以将其用作 stringr::str_extract(x, "^[A-Z]+[A-Z] [1-9].*?(?=,\\s*[A-Z]{2})").

详情

  • ^ - 字符串的开始
  • [A-Z]+[A-Z] - 两个或多个大写字母 (= [A-Z]{2,})
  • [1-9] - 从 19
  • 的数字
  • .*? - 任何零个或多个字符,换行字符除外,尽可能少
  • (?=,\s*[A-Z]{2}) - 需要 、零个或多个空格和两个大写 ASCII 字母的正向前瞻在当前位置的右侧。

虽然在 base R 中,您可以使用

sub("^([A-Z]+[A-Z] [1-9].*?),\\s*[A-Z]{2}.*", "\\1", x, perl=TRUE)

参见 this regex demo .

关于正则表达式:如何将 .* 限制为仅数字和标点符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66886594/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com