gpt4 book ai didi

python - JIRA 标识符的正则表达式

转载 作者:太空狗 更新时间:2023-10-29 16:55:18 24 4
gpt4 key购买 nike

我正在尝试从一行文本中提取 JIRA 标识符。

JIRA 标识符的形式为 [A-Z]+-[0-9] - 我有以下模式:

foreach my $line ( @textBlock ) {
my ( $id ) = ( $line =~ /[\s|]?([A-Z]+-[0-9]+)[\s:|]?/ );
push @jiraIDs, $id if ( defined $id && $id !~ /^$/ );
}

如果有人指定了一些包含另一个字符串中的模式的文本,这将无法应对 - 例如 blah_blah_ABC-123 将匹配 ABC-123。我不想强制要求匹配项前面必须有一个空格或其他定界符,因为如果标识符位于行的开头,那将失败。

谁能推荐必要的 rune ?

谢谢。

最佳答案

官方 JIRA ID 正则表达式(Java):

Atlassian 自己有几个网页,建议一个好的 (java) 正则表达式是这样的:

((?<!([A-Z]{1,10})-?)[A-Z]+-\d+)

(来源:https://confluence.atlassian.com/display/STASHKB/Integrating+with+custom+JIRA+issue+key)

Test String:
"BF-18 abc-123 X-88 ABCDEFGHIJKL-999 abc XY-Z-333 abcDEF-33 ABC-1"

Matches:
BF-18, X-88, ABCDEFGHIJKL-999, DEF-33, ABC-1

改进的 JIRA ID 正则表达式(Java):

但是,我不太喜欢它,因为它会匹配“abcDEF-33”中的“DEF-33”,而我更愿意完全忽略“abcDEF-33”。所以在我自己的代码中我使用:

((?<!([A-Za-z]{1,10})-?)[A-Z]+-\d+)

注意“DEF-33”如何不再匹配:

Test String:
"BF-18 abc-123 X-88 ABCDEFGHIJKL-999 abc XY-Z-333 abcDEF-33 ABC-1"

Matches:
BF-18, X-88, ABCDEFGHIJKL-999, ABC-1

改进的 JIRA ID 正则表达式(JavaScript):

我还需要 JavaScript 中的这个正则表达式。不幸的是,JavaScript 不支持 LookBehind (?<!a)b ,所以我不得不将它移植到 LookAhead a(?!b)并反转一切:

var jira_matcher = /\d+-[A-Z]+(?!-?[a-zA-Z]{1,10})/g

这意味着要匹配的字符串也需要提前反转:

var s = "BF-18 abc-123 X-88 ABCDEFGHIJKL-999 abc XY-Z-333 abcDEF-33 ABC-1"
s = reverse(s)
var m = s.match(jira_matcher);

// Also need to reverse all the results!
for (var i = 0; i < m.length; i++) {
m[i] = reverse(m[i])
}
m.reverse()
console.log(m)

// Output:
[ 'BF-18', 'X-88', 'ABCDEFGHIJKL-999', 'ABC-1' ]

关于python - JIRA 标识符的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19322669/

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