BBEdit Grep/Regex 在破折号后查找和替换部分

3

当我想查找并删除文章编号列中以破折号 (-) 开头及其后面所有内容时,正则表达式应该是什么样的呢?

我正在使用BBEdit搜索和替换制表符分隔的CSV文件中的字符串(示例如下)。

"Article number"    "Name"  "Third Column"
"Shorts Artic"  "Swa..."    "2018-07-28"
"Shorts Artic-1"    "Swa..."    ""
"Shorts Artic-2-1"  "Swa..."    "https://test-domain.com/..."
"Shorts Artic-2-2-1"    "Sw..." ""
"Shorts Artic-2-2-2-2-1"    "Ba..." "-asd"
"Shorts Artic-2-2-2-2-2-1"  "Nus..."
"Shorts Artic-2-2-2-2-2-1-1"    "Lek.."
"0858-1"    "Jacket Blue.."
"0858-2-1"  "Jacket Re.."
"0858-2-2-1"    "Int..."
"0858-2-2-2-1"  "In..."
"0858-2-2-2-2-1"    "Int..."
"0858-2-2-2-2-2-1"  "Int..."
"0858-2-2-2-2-2-2-1"    "Int..."
"0858-2-2-2-2-2-2-2-1"  "In..."
"0858-2-2-2-2-2-2-2-2"  "In..."
"0858-2-2-2-2-2-2-2-1"  "In..." "6 107-124 cm"
"stl 31-35-1-1-1-1-2-2-2-1-1"   "In..."

"Shorts Artic-1" 将变为 "Shorts Artic"

"Shorts Artic-2-2-1" 将变为 "Shorts Artic"

"0858-2-2-2-2-2-2-2-2" 将变为 "0858"

1个回答

7

您可以使用此模式:

("[a-zA-Z 0-9]+)(?:-\d)+(?=")
  • ("[a-zA-Z 0-9]+) 匹配并捕获",字母、空格和数字。
  • (?:-\d)+ 非捕获组。重复匹配并捕获-和数字。
  • (?=") 正向先行断言,匹配"

替换为:

 \1

您可以在此处尝试该模式 https://regex101.com/r/fb5rEY/3
如果需要更新的文本文件,您可以使用:
^"((?:[a-zA-z]+ ?)+|[0-9]+)(?:-?\d)+(?=")

替换为:

"\1

你可以在这里尝试这个模式。

非常接近。但它不匹配“stl 31-35-1-1-1-1-2-2-2-1-1”,如果第二/第三列中有日期,则匹配日期“2018-07-28”。我更新了我的示例数据。 - petsk
@petsk 没问题,但我不喜欢留下未解决的问题 :P 请参见更新答案中的第二个模式 - Paolo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接