python - 与 Perl 和 Python 相比,正则表达式模式在 TCL 中的行为有所不同

标签 python perl tcl tclsh

我正在尝试使用正则表达式从字符串中提取子字符串。以下是 Python 中的工作代码(给出所需的结果)

Python 解决方案

x = r'CAR_2_ABC_547_d'
>>> spattern = re.compile("CAR_.*?_(.*)")
>>> spattern.search(x).group(1)
'ABC_547_d'
>>>

Perl 解决方案

$ echo "CAR_2_ABC_547_d" | perl -pe's/CAR_.*?_(.*)/$1/'
ABC_547_d

TCL解决方案

但是,当我尝试在 Tcl 中使用这种方法时,它给了我不同的结果。有人可以评论一下这种行为

% regexp -inline "CAR_.*?_(.*)" "CAR_2_ABC_547_d"
CAR_2_ {}

最佳答案

A branch has the same preference as the first quantified atom in it which has a preference.

因此,如果您将 .* 作为第一个量词,则整个 RE 将是贪婪的, 如果您将 .*? 作为第一个量词,则整个 RE 将是非贪婪的。

由于您首先使用了 .*? 本身,因此进一步的表达式仅遵循惰性模式。

如果添加行尾$,那么它将匹配整个行。

% regexp -inline "CAR_.*?_(.*)$" "CAR_2_ABC_547_d"
CAR_2_ABC_547_d ABC_547_d

引用: re_syntax

关于python - 与 Perl 和 Python 相比,正则表达式模式在 TCL 中的行为有所不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39346524/

相关文章:

algorithm - 如何以更接近匹配的方式获得排序列表?

Python Tkinter Tk/Tcl 使用问题

python - MapperParsingException 在使用 elasticsearch 在 django-haystack 中执行 rebuild_index

Python 的 db-query 很慢,但 Perl 没有

regex - 为什么在这个 Perl 正则表达式中 `\s+` 比 `\s\s*` 快得多?

c - Tcl - 从 C 结构访问字段

python - Django : customizing FileField value while editing a model

Python正则表达式 - 多重搜索

python - 在 python 中的不规则网格上覆盖 map 的等高线

perl - 无法使用 Win32::Console 将 0 作为密码输入