正则表达式 - 转换为驼峰命名法 / 移除下划线

3

我希望将记事本/Sql Server管理工具中的所有字符串转换为驼峰式并删除所有下划线。

例如:

string a = REFERENCE_DATA_ID
String b = ReferenceDataId

我想将字符串a中的下划线去掉,并转换为如字符串b所示的驼峰式大小写。请帮我解决这个问题。

1
这不能仅通过正则表达式完成,因此在没有脚本的情况下无法在Notepad++中实现。您需要一个回调函数来进行转换。 - Martin Ender
我想在Microsoft SQL Server管理工具中更改脚本。他们提供了使用正则表达式进行替换的选项。 - Dixit Chopra
1
无论使用哪种工具,正则表达式引擎通常不支持此类转换。如果您正在使用Perl,则可以使用/e修饰符执行一些代码来转换替换文本,但您没有该选项可用。 - pndc
请参考这个stackoverflow链接:使用正则表达式将字符转换为大写(EditPad Pro) - user2124294
2个回答

3
您可以在Notepad++中通过一步操作完成此操作:
您可以在Notepad++中完成此操作,只需一步:
Find: ([a-z]+)[_]?([a-z]?)([a-z]+)[_]?([a-z]?)([a-z]+)[_]?([a-z]?)([a-z]+)\.php
Replace: $1\U$2\L$3\U$4\L$5\U$6\L$7

唯一的问题是需要知道下划线可以出现的最大次数以及字符串的结尾。 在上面的例子中,我将php文件名替换为camelCase,知道下划线不能超过3次,少于3次则没有问题。


太棒了,伙计!在三十六个字段中,它处理了所有的字段,除了最后一个下划线后面有数字的6个字段!谢谢! - JGlass

1

假设您的数据已经在表中,它是否必须使用正则表达式?为什么不创建一个标量函数来完成这个任务,并按照以下步骤进行:

  1. UPDATE tableName SET stringa = REPLACE(stringa,'_',' ') --用空格替换下划线
  2. UPDATE tableName SET stringa = dbo.ProperCase(stringa) --使用我下面创建的函数更新字段
  3. UPDATE tableName SET stringa = REPLACE(stringa,' ','') --现在删除空格

FUNCTION

CREATE FUNCTION [dbo].[ProperCase]
(
@String VARCHAR(255)
)

RETURNS VARCHAR(255) AS

BEGIN

DECLARE @i INT
DECLARE @Char CHAR(1)
DECLARE @CorChar CHAR(1)
DECLARE @PrevAscii INT
DECLARE @PrevAscii2 INT
DECLARE @Ret VARCHAR(255)


/* Captalisation rules */

-- Capitalise first letter of each word
-- Capitalise next letter after special characters

-- eg joe o'bloggs-bloggs jr -> Joe O'Bloggs-Bloggs Jr

SET @Ret = ''
SET @i = 1
WHILE @i <= LEN(@String)

BEGIN
   SET @Char = SUBSTRING(@String, @i, 1)
   SET @CorChar = CASE  WHEN @i = 1                                 THEN UPPER(@Char)-- First letter
                    WHEN @PrevAscii = 32                        THEN UPPER(@Char)-- Follows Space
                    WHEN @PrevAscii = 39 AND @PrevAscii2 =  79  THEN UPPER(@Char)-- Follows O'
                    WHEN @PrevAscii = 45                        THEN UPPER(@Char)-- Follows Dash
                    WHEN @PrevAscii = 46                        THEN UPPER(@Char)-- Follows Fullstop
                    ELSE LOWER(@Char)
                 END
   SET @Ret = @Ret + @CorChar

   SET @i = @i + 1
   SET @PrevAscii2 = @PrevAscii
   SET @PrevAscii = ASCII(@CorChar)
END

--Now sort out capitalistaion for van, de, den, and der

SET @Ret = CASE WHEN @Ret LIKE 'Van %' THEN 'v' + SUBSTRING(@Ret,2,255) ELSE @Ret END
SET @Ret = CASE WHEN @Ret LIKE 'De %' THEN 'd' + SUBSTRING(@Ret,2,255) ELSE @Ret END
SET @Ret = CASE WHEN @Ret LIKE 'Der %' THEN 'd' + SUBSTRING(@Ret,2,255) ELSE @Ret END
SET @Ret = CASE WHEN @Ret LIKE 'Den %' THEN 'd' + SUBSTRING(@Ret,2,255) ELSE @Ret END

SET @Ret = REPLACE(@Ret,' De ',' de ')
SET @Ret = REPLACE(@Ret,' Der ',' der ')
SET @Ret = REPLACE(@Ret,' Den ',' den ')

RETURN @Ret

END

我使用Microsoft Word解决了这个问题。首先将字符串大写,然后用空格替换下划线(_)。我的问题已经解决了。非常感谢您的帮助。 - Dixit Chopra

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